feat: 通过链接邀请加入项目
This commit is contained in:
@@ -6,6 +6,7 @@ use App\Exceptions\ApiException;
|
||||
use App\Models\AbstractModel;
|
||||
use App\Models\Project;
|
||||
use App\Models\ProjectColumn;
|
||||
use App\Models\ProjectInvite;
|
||||
use App\Models\ProjectLog;
|
||||
use App\Models\ProjectTask;
|
||||
use App\Models\ProjectTaskFile;
|
||||
@@ -258,6 +259,110 @@ class ProjectController extends AbstractController
|
||||
return Base::retSuccess('修改成功', ['id' => $project->id]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取邀请链接(限:项目负责人)
|
||||
*
|
||||
* @apiParam {Number} project_id 项目ID
|
||||
* @apiParam {String} refresh 刷新链接
|
||||
* - no: 只获取(默认)
|
||||
* - yes: 刷新链接,之前的将失效
|
||||
*/
|
||||
public function invite()
|
||||
{
|
||||
User::auth();
|
||||
//
|
||||
$project_id = intval(Request::input('project_id'));
|
||||
$refresh = Request::input('refresh', 'no');
|
||||
//
|
||||
$project = Project::userProject($project_id);
|
||||
if (!$project->owner) {
|
||||
return Base::retError('仅限项目负责人查看');
|
||||
}
|
||||
//
|
||||
$invite = Base::settingFind('system', 'project_invite');
|
||||
if ($invite == 'close') {
|
||||
return Base::retError('未开放此功能');
|
||||
}
|
||||
//
|
||||
$projectInvite = ProjectInvite::whereProjectId($project->id)->first();
|
||||
if (empty($projectInvite)) {
|
||||
$projectInvite = ProjectInvite::createInstance([
|
||||
'project_id' => $project->id,
|
||||
'code' => Base::generatePassword(64),
|
||||
]);
|
||||
$projectInvite->save();
|
||||
} else {
|
||||
if ($refresh == 'yes') {
|
||||
$projectInvite->code = Base::generatePassword(64);
|
||||
$projectInvite->save();
|
||||
}
|
||||
}
|
||||
return Base::retSuccess('success', [
|
||||
'url' => Base::fillUrl('manage/project/invite?code=' . $projectInvite->code),
|
||||
'num' => $projectInvite->num
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过邀请链接code获取项目信息
|
||||
*
|
||||
* @apiParam {String} code
|
||||
*/
|
||||
public function invite__info()
|
||||
{
|
||||
User::auth();
|
||||
//
|
||||
$code = Request::input('code');
|
||||
//
|
||||
$invite = Base::settingFind('system', 'project_invite');
|
||||
if ($invite == 'close') {
|
||||
return Base::retError('未开放此功能');
|
||||
}
|
||||
//
|
||||
$projectInvite = ProjectInvite::with(['project'])->whereCode($code)->first();
|
||||
if (empty($projectInvite)) {
|
||||
return Base::retError('邀请code不存在');
|
||||
}
|
||||
return Base::retSuccess('success', $projectInvite);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过邀请链接code加入项目
|
||||
*
|
||||
* @apiParam {String} code
|
||||
*/
|
||||
public function invite__join()
|
||||
{
|
||||
$user = User::auth();
|
||||
//
|
||||
$code = Request::input('code');
|
||||
//
|
||||
$invite = Base::settingFind('system', 'project_invite');
|
||||
if ($invite == 'close') {
|
||||
return Base::retError('未开放此功能');
|
||||
}
|
||||
//
|
||||
$projectInvite = ProjectInvite::with(['project'])->whereCode($code)->first();
|
||||
if (empty($projectInvite)) {
|
||||
return Base::retError('邀请code不存在');
|
||||
}
|
||||
if ($projectInvite->already) {
|
||||
return Base::retSuccess('已加入', $projectInvite);
|
||||
}
|
||||
if (!$projectInvite->project?->joinProject($user->userid)) {
|
||||
return Base::retError('加入失败,请稍后再试');
|
||||
}
|
||||
$projectInvite->num++;
|
||||
$projectInvite->save();
|
||||
//
|
||||
$projectInvite->project->syncDialogUser();
|
||||
$projectInvite->project->addLog("会员ID:" . $user->userid . " 通过邀请链接加入项目");
|
||||
//
|
||||
$data = $projectInvite->toArray();
|
||||
$data['already'] = true;
|
||||
return Base::retSuccess('加入成功', $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 移交项目(限:项目负责人)
|
||||
*
|
||||
|
||||
@@ -24,7 +24,8 @@ class SystemController extends AbstractController
|
||||
*
|
||||
* @apiParam {String} type
|
||||
* - get: 获取(默认)
|
||||
* - save: 保存设置(参数:reg、login_code、password_policy、chat_nickname)
|
||||
* - all: 获取所有(需要管理员权限)
|
||||
* - save: 保存设置(参数:reg、reg_invite、login_code、password_policy、project_invite、chat_nickname)
|
||||
|
||||
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
||||
* @apiSuccess {String} msg 返回信息(错误描述)
|
||||
@@ -40,7 +41,7 @@ class SystemController extends AbstractController
|
||||
User::auth('admin');
|
||||
$all = Request::input();
|
||||
foreach ($all AS $key => $value) {
|
||||
if (!in_array($key, ['reg', 'login_code', 'password_policy', 'chat_nickname'])) {
|
||||
if (!in_array($key, ['reg', 'reg_invite', 'login_code', 'password_policy', 'project_invite', 'chat_nickname'])) {
|
||||
unset($all[$key]);
|
||||
}
|
||||
}
|
||||
@@ -49,9 +50,17 @@ class SystemController extends AbstractController
|
||||
$setting = Base::setting('system');
|
||||
}
|
||||
//
|
||||
if ($type == 'all') {
|
||||
User::auth('admin');
|
||||
$setting['reg_invite'] = $setting['reg_invite'] ?: Base::generatePassword(8);
|
||||
} else {
|
||||
if (isset($setting['reg_invite'])) unset($setting['reg_invite']);
|
||||
}
|
||||
//
|
||||
$setting['reg'] = $setting['reg'] ?: 'open';
|
||||
$setting['login_code'] = $setting['login_code'] ?: 'auto';
|
||||
$setting['password_policy'] = $setting['password_policy'] ?: 'simple';
|
||||
$setting['project_invite'] = $setting['project_invite'] ?: 'open';
|
||||
$setting['chat_nickname'] = $setting['chat_nickname'] ?: 'optional';
|
||||
//
|
||||
return Base::retSuccess('success', $setting ?: json_decode('{}'));
|
||||
|
||||
Reference in New Issue
Block a user