You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
308 lines
8.4 KiB
308 lines
8.4 KiB
<?php
|
|
/**
|
|
* 通讯录API
|
|
*/
|
|
|
|
// 设置错误报告
|
|
error_reporting(E_ALL);
|
|
ini_set('display_errors', 0);
|
|
|
|
// 设置JSON响应头
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
|
|
// 包含必要的类
|
|
require_once '../../utils/Config.php';
|
|
require_once '../../utils/Logger.php';
|
|
require_once '../../utils/Helper.php';
|
|
require_once '../../utils/Database.php';
|
|
|
|
// 处理请求
|
|
try {
|
|
// 获取请求方法
|
|
$method = $_SERVER['REQUEST_METHOD'] ?? 'GET';
|
|
|
|
// 连接数据库
|
|
$db = Database::getInstance();
|
|
|
|
// 根据请求方法处理
|
|
switch ($method) {
|
|
case 'GET':
|
|
// 获取通讯录
|
|
if (isset($_GET['id'])) {
|
|
// 获取单个联系人详情
|
|
getContactDetails($db, $_GET['id']);
|
|
} else {
|
|
// 获取联系人列表
|
|
getContacts($db);
|
|
}
|
|
break;
|
|
case 'POST':
|
|
// 添加联系人
|
|
addContact($db);
|
|
break;
|
|
case 'PUT':
|
|
// 编辑联系人
|
|
editContact($db);
|
|
break;
|
|
case 'DELETE':
|
|
// 删除联系人
|
|
deleteContact($db);
|
|
break;
|
|
default:
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => '不支持的请求方法'
|
|
]);
|
|
break;
|
|
}
|
|
} catch (Exception $e) {
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => '服务器内部错误: ' . $e->getMessage()
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* 获取联系人列表
|
|
* @param Database $db 数据库实例
|
|
*/
|
|
function getContacts($db) {
|
|
// 获取请求参数
|
|
$username = isset($_GET['username']) ? $_GET['username'] : '';
|
|
$search = isset($_GET['search']) ? $_GET['search'] : '';
|
|
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
|
|
$perPage = isset($_GET['perPage']) ? (int)$_GET['perPage'] : 20;
|
|
|
|
// 验证必要参数
|
|
if (empty($username)) {
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => '缺少用户名参数'
|
|
]);
|
|
return;
|
|
}
|
|
|
|
// 构建查询条件
|
|
$where = "WHERE user_id = ?";
|
|
$params = [$username];
|
|
|
|
if (!empty($search)) {
|
|
$where .= " AND (name LIKE ? OR email LIKE ? OR phone LIKE ?)";
|
|
$searchParam = "%$search%";
|
|
$params[] = $searchParam;
|
|
$params[] = $searchParam;
|
|
$params[] = $searchParam;
|
|
}
|
|
|
|
// 计算偏移量
|
|
$offset = ($page - 1) * $perPage;
|
|
|
|
// 查询总数
|
|
$totalSql = "SELECT COUNT(*) as total FROM contacts $where";
|
|
$totalResult = $db->fetchOne($totalSql, $params);
|
|
$total = $totalResult['total'];
|
|
|
|
// 查询联系人列表
|
|
$sql = "SELECT id, name, email, phone, company, department, position, create_time, update_time FROM contacts $where ORDER BY name ASC LIMIT ? OFFSET ?";
|
|
$params[] = $perPage;
|
|
$params[] = $offset;
|
|
|
|
$contacts = $db->fetchAll($sql, $params);
|
|
|
|
// 返回响应
|
|
echo json_encode([
|
|
'success' => true,
|
|
'data' => [
|
|
'contacts' => $contacts,
|
|
'total' => $total,
|
|
'page' => $page,
|
|
'perPage' => $perPage,
|
|
'totalPages' => ceil($total / $perPage)
|
|
]
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* 获取单个联系人详情
|
|
* @param Database $db 数据库实例
|
|
* @param int $id 联系人ID
|
|
*/
|
|
function getContactDetails($db, $id) {
|
|
// 获取请求参数
|
|
$username = isset($_GET['username']) ? $_GET['username'] : '';
|
|
|
|
// 验证必要参数
|
|
if (empty($username)) {
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => '缺少用户名参数'
|
|
]);
|
|
return;
|
|
}
|
|
|
|
// 查询联系人详情
|
|
$sql = "SELECT id, name, email, phone, company, department, position, create_time, update_time FROM contacts WHERE id = ? AND user_id = ?";
|
|
$contact = $db->fetchOne($sql, [$id, $username]);
|
|
|
|
if ($contact) {
|
|
echo json_encode([
|
|
'success' => true,
|
|
'data' => [
|
|
'contact' => $contact
|
|
]
|
|
]);
|
|
} else {
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => '联系人不存在或无权访问'
|
|
]);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 添加联系人
|
|
* @param Database $db 数据库实例
|
|
*/
|
|
function addContact($db) {
|
|
// 获取请求数据
|
|
$data = json_decode(file_get_contents('php://input'), true);
|
|
|
|
// 验证请求数据
|
|
if (!$data || empty($data['username']) || empty($data['name']) || empty($data['email'])) {
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => '缺少必要参数'
|
|
]);
|
|
return;
|
|
}
|
|
|
|
$username = $data['username'];
|
|
|
|
// 检查联系人是否已存在
|
|
$existingContact = $db->fetchOne("SELECT id FROM contacts WHERE email = ? AND user_id = ?", [$data['email'], $username]);
|
|
if ($existingContact) {
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => '该邮箱已存在于通讯录中'
|
|
]);
|
|
return;
|
|
}
|
|
|
|
// 插入联系人
|
|
$sql = "INSERT INTO contacts (user_id, name, email, phone, company, department, position) VALUES (?, ?, ?, ?, ?, ?, ?)";
|
|
|
|
$db->insert($sql, [
|
|
$username,
|
|
$data['name'],
|
|
$data['email'],
|
|
isset($data['phone']) ? $data['phone'] : '',
|
|
isset($data['company']) ? $data['company'] : '',
|
|
isset($data['department']) ? $data['department'] : '',
|
|
isset($data['position']) ? $data['position'] : ''
|
|
]);
|
|
|
|
echo json_encode([
|
|
'success' => true,
|
|
'message' => '联系人添加成功'
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* 编辑联系人
|
|
* @param Database $db 数据库实例
|
|
*/
|
|
function editContact($db) {
|
|
// 获取请求数据
|
|
$data = json_decode(file_get_contents('php://input'), true);
|
|
|
|
// 验证请求数据
|
|
if (!$data || empty($data['id']) || empty($data['username']) || empty($data['name']) || empty($data['email'])) {
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => '缺少必要参数'
|
|
]);
|
|
return;
|
|
}
|
|
|
|
$id = $data['id'];
|
|
$username = $data['username'];
|
|
|
|
// 检查联系人是否存在
|
|
$existingContact = $db->fetchOne("SELECT id FROM contacts WHERE id = ? AND user_id = ?", [$id, $username]);
|
|
if (!$existingContact) {
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => '联系人不存在或无权访问'
|
|
]);
|
|
return;
|
|
}
|
|
|
|
// 检查邮箱是否已被其他联系人使用
|
|
$emailExists = $db->fetchOne("SELECT id FROM contacts WHERE email = ? AND id != ? AND user_id = ?", [$data['email'], $id, $username]);
|
|
if ($emailExists) {
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => '该邮箱已存在于通讯录中'
|
|
]);
|
|
return;
|
|
}
|
|
|
|
// 更新联系人
|
|
$sql = "UPDATE contacts SET name = ?, email = ?, phone = ?, company = ?, department = ?, position = ? WHERE id = ? AND user_id = ?";
|
|
|
|
$db->update($sql, [
|
|
$data['name'],
|
|
$data['email'],
|
|
isset($data['phone']) ? $data['phone'] : '',
|
|
isset($data['company']) ? $data['company'] : '',
|
|
isset($data['department']) ? $data['department'] : '',
|
|
isset($data['position']) ? $data['position'] : '',
|
|
$id,
|
|
$username
|
|
]);
|
|
|
|
echo json_encode([
|
|
'success' => true,
|
|
'message' => '联系人编辑成功'
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* 删除联系人
|
|
* @param Database $db 数据库实例
|
|
*/
|
|
function deleteContact($db) {
|
|
// 获取请求参数
|
|
$id = isset($_GET['id']) ? $_GET['id'] : '';
|
|
$username = isset($_GET['username']) ? $_GET['username'] : '';
|
|
|
|
// 验证必要参数
|
|
if (empty($id) || empty($username)) {
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => '缺少必要参数'
|
|
]);
|
|
return;
|
|
}
|
|
|
|
// 检查联系人是否存在
|
|
$existingContact = $db->fetchOne("SELECT id FROM contacts WHERE id = ? AND user_id = ?", [$id, $username]);
|
|
if (!$existingContact) {
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => '联系人不存在或无权访问'
|
|
]);
|
|
return;
|
|
}
|
|
|
|
// 删除联系人
|
|
$sql = "DELETE FROM contacts WHERE id = ? AND user_id = ?";
|
|
|
|
$db->delete($sql, [$id, $username]);
|
|
|
|
echo json_encode([
|
|
'success' => true,
|
|
'message' => '联系人删除成功'
|
|
]);
|
|
}
|