Skip to content

Commit

Permalink
✨ 增强扩展用户中心
Browse files Browse the repository at this point in the history
  • Loading branch information
Licoy committed Jan 28, 2023
1 parent 185a139 commit dfc186e
Show file tree
Hide file tree
Showing 6 changed files with 172 additions and 79 deletions.
1 change: 0 additions & 1 deletion inc/ajax/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,3 @@
require_once __DIR__ . '/dialog-post-share.php';
require_once __DIR__ . '/dialog-smiley.php';
require_once __DIR__ . '/dialog-reward.php';
require_once __DIR__ . '/user.php';
34 changes: 0 additions & 34 deletions inc/ajax/user.php

This file was deleted.

39 changes: 39 additions & 0 deletions inc/classes/PuockClassLoad.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<?php

namespace Puock\Theme\classes;

class PuockClassLoad
{

private static array $classes = [];

public function __construct()
{
if (pk_is_checked('user_center')) {
self::$classes[] = PuockUserCenter::class;
}
add_action('init', array($this, '__wp_init'));
}

public function __wp_init()
{
$this->load_class();
}

public static function add_class(IPuockClassLoad $class)
{
self::$classes[] = $class;
}

private static function load_class()
{
foreach (self::$classes as $class) {
$class::load();
}
}
}

interface IPuockClassLoad
{
public static function load();
}
104 changes: 104 additions & 0 deletions inc/classes/PuockUserCenter.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
<?php

namespace Puock\Theme\classes;

class PuockUserCenter implements IPuockClassLoad
{

private static array $menus = [];

public static function load()
{
pk_ajax_register('pk_user_update_profile', array(__CLASS__, 'update_profile'));
self::register_basic_menus();
}

private static function register_basic_menus()
{
self::$menus['profile'] = [
'title' => __('个人资料', PUOCK),
'subtitle' => __('您的基本个人资料', PUOCK),
'call' => array(__CLASS__, 'page_profile'),
];
}

public static function get_menus()
{
return apply_filters('pk_user_center_menus', self::$menus);
}

public static function register_menu($id, $title, $call, $subtitle = '', $args = array())
{
self::$menus[$id] = [
'title' => $title,
'subtitle' => $subtitle,
'call' => $call,
];
}

public static function update_profile()
{
if (is_string($data = pk_get_req_data([
'nickname' => ['name' => __('昵称', PUOCK), 'required' => true, 'remove_html' => true],
'user_url' => ['name' => __('网站地址', PUOCK), 'remove_html' => true, 'empty' => true],
'description' => ['name' => __('个人说明', PUOCK), 'remove_html' => true, 'empty' => true],
])) === true) {
echo pk_ajax_resp_error($data);
wp_die();
}
$data['ID'] = get_current_user_id();
if (!empty($data['nickname'])) {
$data['display_name'] = $data['nickname'];
}
if (!wp_update_user($data)) {
echo pk_ajax_resp_error(__('保存失败', PUOCK));
wp_die();
}
echo pk_ajax_resp(null, __('保存成功', PUOCK));
wp_die();
}

public static function page_profile()
{
$userinfo = get_userdata(get_current_user_id());
?>
<form action="<?php echo pk_ajax_url('pk_user_update_profile') ?>" class="ajax-form" data-no-reset>
<div class="mb-3 row">
<label class="col-sm-2 col-form-label">ID</label>
<div class="col-sm-10">
<input type="text" readonly class="form-control" value="<?php echo $userinfo->ID ?>">
</div>
</div>
<div class="mb-3 row">
<label class="col-sm-2 col-form-label">用户名</label>
<div class="col-sm-10">
<input type="text" readonly class="form-control" value="<?php echo $userinfo->user_nicename ?>">
<small class="c-sub">用户名不可更改</small>
</div>
</div>
<div class="mb-3 row">
<label class="col-sm-2 col-form-label">昵称</label>
<div class="col-sm-10">
<input name="nickname" type="text" class="form-control" value="<?php echo $userinfo->nickname ?>">
</div>
</div>
<div class="mb-3 row">
<label class="col-sm-2 col-form-label">网站地址</label>
<div class="col-sm-10">
<input name="user_url" type="url" class="form-control" value="<?php echo $userinfo->user_url ?>">
</div>
</div>
<div class="mb-3 row">
<label class="col-sm-2 col-form-label">个人说明</label>
<div class="col-sm-10">
<textarea name="description" class="form-control"
rows="4"><?php echo $userinfo->description ?></textarea>
</div>
</div>
<div class="mb-3 text-center">
<button class="btn btn-primary btn-sm" type="submit">提交保存</button>
</div>
</form>
<?php
}
}
12 changes: 11 additions & 1 deletion inc/fun/core.php
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
<?php


use Puock\Theme\classes\PuockClassLoad;

add_action('after_setup_theme', 'puock_theme_setup');
function puock_theme_setup()
{
Expand Down Expand Up @@ -46,6 +49,7 @@ function pk_ajax_resp_error($msg = 'fail', $data = null)
if (pk_is_checked('no_category')) {
require_once PUOCK_ABS_DIR . '/inc/no-category.php';
}
$puock_class_load = new PuockClassLoad();

/*Auth-Domains*/

Expand Down Expand Up @@ -959,7 +963,7 @@ function pk_user_center_url(): string
function pk_rewrite_rule()
{
if (pk_is_checked('user_center')) {
add_rewrite_rule("^uc/?", 'index.php?pagename=user-center', "top");
add_rewrite_rule('^uc/?([0-9A-Za-z_\-]+)?$', 'index.php?pagename=user-center&id=$matches[1]', "top");
}
}

Expand Down Expand Up @@ -987,6 +991,12 @@ function pk_template_redirect()

add_action('template_redirect', 'pk_template_redirect');

function pk_query_vars($vars){
$vars[] = 'id';
return $vars;
}
add_filter( 'query_vars', 'pk_query_vars' );

function pk_load_template($_template_file, $require_once = true, $args = array())
{
status_header(200);
Expand Down
61 changes: 18 additions & 43 deletions inc/page/user-center.php
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
<?php

use Puock\Theme\classes\PuockUserCenter;

if (!is_user_logged_in()) {
wp_redirect(home_url());
exit;
}
pk_set_custom_seo('用户中心');
$userinfo = get_userdata(get_current_user_id());
get_header();
$current_user_center_menu = get_query_var('id', 'profile');
if(empty($current_user_center_menu)){
$current_user_center_menu = 'profile';
}
$user_center_menus = PuockUserCenter::get_menus();
?>

<div id="content" class="mt20 container min-height-container">
Expand All @@ -14,51 +21,19 @@
<div class="row row-cols-1">
<div class="col-lg-3 col-md-12">
<div class="list-group user-center-menus">
<a href="#" class="ta3 list-group-item d-flex justify-content-between align-items-start current">
<div class="ms-2 me-auto">
<div>基本信息</div>
<span class="sub-title d-none d-md-inline-block">基本信息</span>
</div>
</a>
<?php foreach ($user_center_menus as $key => $menu): ?>
<a href="<?php echo home_url() . '/uc/' . $key; ?>"
class="ta3 list-group-item d-flex justify-content-between align-items-start <?php echo $current_user_center_menu === $key ? 'current' : ''; ?>">
<div class="ms-2 me-auto">
<div><?php echo $menu['title'] ?></div>
<span class="sub-title d-none d-md-inline-block"><?php echo $menu['subtitle'] ?></span>
</div>
</a>
<?php endforeach; ?>
</div>
</div>
<div class="col-lg-9 col-md-12 fs14">
<form action="<?php echo pk_ajax_url('pk_user_update_profile') ?>" class="ajax-form" data-no-reset>
<div class="mb-3 row">
<label class="col-sm-2 col-form-label">ID</label>
<div class="col-sm-10">
<input type="text" readonly class="form-control" value="<?php echo $userinfo->ID ?>">
</div>
</div>
<div class="mb-3 row">
<label class="col-sm-2 col-form-label">用户名</label>
<div class="col-sm-10">
<input type="text" readonly class="form-control" value="<?php echo $userinfo->user_nicename ?>">
<small class="c-sub">用户名不可更改</small>
</div>
</div>
<div class="mb-3 row">
<label class="col-sm-2 col-form-label">昵称</label>
<div class="col-sm-10">
<input name="nickname" type="text" class="form-control" value="<?php echo $userinfo->nickname ?>">
</div>
</div>
<div class="mb-3 row">
<label class="col-sm-2 col-form-label">网站地址</label>
<div class="col-sm-10">
<input name="user_url" type="url" class="form-control" value="<?php echo $userinfo->user_url ?>">
</div>
</div>
<div class="mb-3 row">
<label class="col-sm-2 col-form-label">个人说明</label>
<div class="col-sm-10">
<textarea name="description" class="form-control" rows="4"><?php echo $userinfo->description ?></textarea>
</div>
</div>
<div class="mb-3 text-center">
<button class="btn btn-primary btn-sm" type="submit">提交保存</button>
</div>
</form>
<?php call_user_func($user_center_menus[$current_user_center_menu]['call']) ?>
</div>
</div>
</div>
Expand Down

0 comments on commit dfc186e

Please sign in to comment.