|
@@ -10,6 +10,13 @@ use Illuminate\Support\Facades\DB;
|
|
|
use Illuminate\Support\Str;
|
|
use Illuminate\Support\Str;
|
|
|
use App\Http\Api\AuthApi;
|
|
use App\Http\Api\AuthApi;
|
|
|
use App\Http\Api\StudioApi;
|
|
use App\Http\Api\StudioApi;
|
|
|
|
|
+use App\Http\Api\ChannelApi;
|
|
|
|
|
+use App\Http\Api\ShareApi;
|
|
|
|
|
+use App\Tools\Tools;
|
|
|
|
|
+use App\Http\Resources\TermResource;
|
|
|
|
|
+use Illuminate\Support\Facades\App;
|
|
|
|
|
+use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|
|
|
|
+use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
|
|
|
|
|
|
|
|
class DhammaTermController extends Controller
|
|
class DhammaTermController extends Controller
|
|
|
{
|
|
{
|
|
@@ -21,7 +28,7 @@ class DhammaTermController extends Controller
|
|
|
public function index(Request $request)
|
|
public function index(Request $request)
|
|
|
{
|
|
{
|
|
|
$result=false;
|
|
$result=false;
|
|
|
- $indexCol = ['id','guid','word','meaning','other_meaning','note','language','channal','created_at','updated_at'];
|
|
|
|
|
|
|
+ $indexCol = ['id','guid','word','meaning','other_meaning','note','language','channal','owner','editor_id','created_at','updated_at'];
|
|
|
|
|
|
|
|
switch ($request->get('view')) {
|
|
switch ($request->get('view')) {
|
|
|
case 'create-by-channel':
|
|
case 'create-by-channel':
|
|
@@ -72,21 +79,38 @@ class DhammaTermController extends Controller
|
|
|
]);
|
|
]);
|
|
|
break;
|
|
break;
|
|
|
case 'studio':
|
|
case 'studio':
|
|
|
- # 获取studio内所有channel
|
|
|
|
|
|
|
+ # 获取 studio 内所有 term
|
|
|
$search = $request->get('search');
|
|
$search = $request->get('search');
|
|
|
$user = AuthApi::current($request);
|
|
$user = AuthApi::current($request);
|
|
|
- if($user){
|
|
|
|
|
- //判断当前用户是否有指定的studio的权限
|
|
|
|
|
- if($user['user_uid'] === StudioApi::getIdByName($request->get('name'))){
|
|
|
|
|
- $table = DhammaTerm::select($indexCol)
|
|
|
|
|
- ->where('owner', $user["user_uid"]);
|
|
|
|
|
- }else{
|
|
|
|
|
- return $this->error(__('auth.failed'));
|
|
|
|
|
- }
|
|
|
|
|
- }else{
|
|
|
|
|
|
|
+ if(!$user){
|
|
|
|
|
+ return $this->error(__('auth.failed'));
|
|
|
|
|
+ }
|
|
|
|
|
+ //判断当前用户是否有指定的studio的权限
|
|
|
|
|
+ if($user['user_uid'] !== StudioApi::getIdByName($request->get('name'))){
|
|
|
return $this->error(__('auth.failed'));
|
|
return $this->error(__('auth.failed'));
|
|
|
}
|
|
}
|
|
|
|
|
+ $table = DhammaTerm::select($indexCol)
|
|
|
|
|
+ ->where('owner', $user["user_uid"]);
|
|
|
break;
|
|
break;
|
|
|
|
|
+ case 'channel':
|
|
|
|
|
+ # 获取 studio 内所有 term
|
|
|
|
|
+ $search = $request->get('search');
|
|
|
|
|
+ $user = AuthApi::current($request);
|
|
|
|
|
+ if(!$user){
|
|
|
|
|
+ return $this->error(__('auth.failed'));
|
|
|
|
|
+ }
|
|
|
|
|
+ //判断当前用户是否有指定的 channel 的权限
|
|
|
|
|
+ $channel = Channel::find($request->get('id'));
|
|
|
|
|
+ if($user['user_uid'] !== $channel->owner_uid ){
|
|
|
|
|
+ //看是否为协作
|
|
|
|
|
+ $power = ShareApi::getResPower($user['user_uid'],$request->get('id'));
|
|
|
|
|
+ if($power === 0){
|
|
|
|
|
+ return $this->error(__('auth.failed'));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ $table = DhammaTerm::select($indexCol)
|
|
|
|
|
+ ->where('channal', $request->get('id'));
|
|
|
|
|
+ break;
|
|
|
case 'show':
|
|
case 'show':
|
|
|
return $this->ok(DhammaTerm::find($request->get('id')));
|
|
return $this->ok(DhammaTerm::find($request->get('id')));
|
|
|
break;
|
|
break;
|
|
@@ -157,7 +181,7 @@ class DhammaTermController extends Controller
|
|
|
$result = $table->get();
|
|
$result = $table->get();
|
|
|
|
|
|
|
|
if($result){
|
|
if($result){
|
|
|
- return $this->ok(["rows"=>$result,"count"=>$count]);
|
|
|
|
|
|
|
+ return $this->ok(["rows"=>TermResource::collection($result),"count"=>$count]);
|
|
|
}else{
|
|
}else{
|
|
|
return $this->error("没有查询到数据");
|
|
return $this->error("没有查询到数据");
|
|
|
}
|
|
}
|
|
@@ -171,26 +195,21 @@ class DhammaTermController extends Controller
|
|
|
*/
|
|
*/
|
|
|
public function store(Request $request)
|
|
public function store(Request $request)
|
|
|
{
|
|
{
|
|
|
- // validate
|
|
|
|
|
- // read more on validation at http://laravel.com/docs/validation
|
|
|
|
|
- $rules = array(
|
|
|
|
|
|
|
+ $user = AuthApi::current($request);
|
|
|
|
|
+ if(!$user){
|
|
|
|
|
+ return $this->error(__('auth.failed'));
|
|
|
|
|
+ }
|
|
|
|
|
+ $validated = $request->validate([
|
|
|
'word' => 'required',
|
|
'word' => 'required',
|
|
|
'meaning' => 'required',
|
|
'meaning' => 'required',
|
|
|
'language' => 'required'
|
|
'language' => 'required'
|
|
|
- );
|
|
|
|
|
- $validator = Validator::make($request->all(), $rules);
|
|
|
|
|
-
|
|
|
|
|
- // process the login
|
|
|
|
|
- if ($validator->fails()) {
|
|
|
|
|
- return $this->error($validator);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
|
|
+ ]);
|
|
|
#查询重复的
|
|
#查询重复的
|
|
|
/*
|
|
/*
|
|
|
重复判定:
|
|
重复判定:
|
|
|
一个channel下面word+tag+language 唯一
|
|
一个channel下面word+tag+language 唯一
|
|
|
*/
|
|
*/
|
|
|
- $table = DhammaTerm::where('owner', $_COOKIE["user_uid"])
|
|
|
|
|
|
|
+ $table = DhammaTerm::where('owner', $user["user_uid"])
|
|
|
->where('word',$request->get("word"))
|
|
->where('word',$request->get("word"))
|
|
|
->where('tag',$request->get("tag"));
|
|
->where('tag',$request->get("tag"));
|
|
|
if($request->get("channel")){
|
|
if($request->get("channel")){
|
|
@@ -204,24 +223,34 @@ class DhammaTermController extends Controller
|
|
|
if($isDoesntExist){
|
|
if($isDoesntExist){
|
|
|
#不存在插入数据
|
|
#不存在插入数据
|
|
|
$term = new DhammaTerm;
|
|
$term = new DhammaTerm;
|
|
|
- $term->id=app('snowflake')->id();
|
|
|
|
|
- $term->guid=Str::uuid();
|
|
|
|
|
- $term->word=$request->get("word");
|
|
|
|
|
- $term->meaning=$request->get("meaning");
|
|
|
|
|
|
|
+ $term->id = app('snowflake')->id();
|
|
|
|
|
+ $term->guid = Str::uuid();
|
|
|
|
|
+ $term->word = $request->get("word");
|
|
|
|
|
+ $term->word_en = Tools::getWordEn($request->get("word"));
|
|
|
|
|
+ $term->meaning = $request->get("meaning");
|
|
|
|
|
+ $term->other_meaning = $request->get("other_meaning");
|
|
|
|
|
+ $term->note = $request->get("note");
|
|
|
|
|
+ $term->tag = $request->get("tag");
|
|
|
|
|
+ $term->channal = $request->get("channal");
|
|
|
|
|
+ $term->language = $request->get("language");
|
|
|
|
|
+ if($request->has("channal")){
|
|
|
|
|
+ $channelInfo = ChannelApi::getById($request->get("channal"));
|
|
|
|
|
+ if(!$channelInfo){
|
|
|
|
|
+ return $this->error("channel id failed");
|
|
|
|
|
+ }else{
|
|
|
|
|
+ $term->owner = $channelInfo['studio_id'];
|
|
|
|
|
+ }
|
|
|
|
|
+ }else{
|
|
|
|
|
+ $term->owner = StudioApi::getIdByName($request->get("studioName"));
|
|
|
|
|
+ }
|
|
|
|
|
+ $term->editor_id = $user["user_id"];
|
|
|
|
|
+ $term->create_time = time()*1000;
|
|
|
|
|
+ $term->modify_time = time()*1000;
|
|
|
$term->save();
|
|
$term->save();
|
|
|
- return $this->ok($data);
|
|
|
|
|
-
|
|
|
|
|
|
|
+ return $this->ok($term);
|
|
|
}else{
|
|
}else{
|
|
|
return $this->error("word existed");
|
|
return $this->error("word existed");
|
|
|
}
|
|
}
|
|
|
- // store
|
|
|
|
|
- /*
|
|
|
|
|
- $data = $request->all();
|
|
|
|
|
- $data['id'] = app('snowflake')->id();
|
|
|
|
|
- $data['guid'] = Str::uuid();
|
|
|
|
|
- DhammaTerm::create($data);
|
|
|
|
|
- */
|
|
|
|
|
-
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -252,9 +281,38 @@ class DhammaTermController extends Controller
|
|
|
* @param \App\Models\DhammaTerm $dhammaTerm
|
|
* @param \App\Models\DhammaTerm $dhammaTerm
|
|
|
* @return \Illuminate\Http\Response
|
|
* @return \Illuminate\Http\Response
|
|
|
*/
|
|
*/
|
|
|
- public function update(Request $request, DhammaTerm $dhammaTerm)
|
|
|
|
|
|
|
+ public function update(Request $request, string $id)
|
|
|
{
|
|
{
|
|
|
//
|
|
//
|
|
|
|
|
+ $user = AuthApi::current($request);
|
|
|
|
|
+ if(!$user){
|
|
|
|
|
+ return $this->error(__('auth.failed'));
|
|
|
|
|
+ }
|
|
|
|
|
+ $dhammaTerm = DhammaTerm::find($id);
|
|
|
|
|
+ $dhammaTerm->word = $request->get("word");
|
|
|
|
|
+ $dhammaTerm->word_en = Tools::getWordEn($request->get("word"));
|
|
|
|
|
+ $dhammaTerm->meaning = $request->get("meaning");
|
|
|
|
|
+ $dhammaTerm->other_meaning = $request->get("other_meaning");
|
|
|
|
|
+ $dhammaTerm->note = $request->get("note");
|
|
|
|
|
+ $dhammaTerm->tag = $request->get("tag");
|
|
|
|
|
+ $dhammaTerm->channal = $request->get("channal");
|
|
|
|
|
+ $dhammaTerm->language = $request->get("language");
|
|
|
|
|
+ if($request->has("channal")){
|
|
|
|
|
+ $channelInfo = ChannelApi::getById($request->get("channal"));
|
|
|
|
|
+ if(!$channelInfo){
|
|
|
|
|
+ return $this->error("channel id failed");
|
|
|
|
|
+ }else{
|
|
|
|
|
+ $dhammaTerm->owner = $channelInfo['studio_id'];
|
|
|
|
|
+ }
|
|
|
|
|
+ }else{
|
|
|
|
|
+ $dhammaTerm->owner = StudioApi::getIdByName($request->get("studioName"));
|
|
|
|
|
+ }
|
|
|
|
|
+ $dhammaTerm->editor_id = $user["user_id"];
|
|
|
|
|
+ $dhammaTerm->create_time = time()*1000;
|
|
|
|
|
+ $dhammaTerm->modify_time = time()*1000;
|
|
|
|
|
+ $dhammaTerm->save();
|
|
|
|
|
+ return $this->ok($dhammaTerm);
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -268,28 +326,34 @@ class DhammaTermController extends Controller
|
|
|
/**
|
|
/**
|
|
|
* 一次删除多个单词
|
|
* 一次删除多个单词
|
|
|
*/
|
|
*/
|
|
|
- if(isset($_COOKIE["user_uid"])){
|
|
|
|
|
- $user_uid = $_COOKIE["user_uid"];
|
|
|
|
|
- }else{
|
|
|
|
|
- $user = AuthApi::current($request);
|
|
|
|
|
- if(!$user){
|
|
|
|
|
- return $this->error(__('auth.failed'));
|
|
|
|
|
- }
|
|
|
|
|
- $user_uid = $user['user_uid'];
|
|
|
|
|
|
|
+ $user = AuthApi::current($request);
|
|
|
|
|
+ if(!$user){
|
|
|
|
|
+ return $this->error(__('auth.failed'));
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+ $count = 0;
|
|
|
if($request->has("uuid")){
|
|
if($request->has("uuid")){
|
|
|
- $count = DhammaTerm::whereIn('guid', $request->get("id"))
|
|
|
|
|
- ->where('owner', $user_uid)
|
|
|
|
|
- ->delete();
|
|
|
|
|
|
|
+ //查看是否有删除权限
|
|
|
|
|
+ foreach ($request->get("id") as $key => $uuid) {
|
|
|
|
|
+ $term = DhammaTerm::find($uuid);
|
|
|
|
|
+ if($term->owner !== $user['user_uid']){
|
|
|
|
|
+ if(!empty($term->channal)){
|
|
|
|
|
+ //看是否为协作
|
|
|
|
|
+ $power = ShareApi::getResPower($user['user_uid'],$term->channal);
|
|
|
|
|
+ if($power < 20){
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+ }else{
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ $count += $term->delete();
|
|
|
|
|
+ }
|
|
|
}else{
|
|
}else{
|
|
|
$arrId = json_decode($request->get("id"),true) ;
|
|
$arrId = json_decode($request->get("id"),true) ;
|
|
|
- $count = 0;
|
|
|
|
|
-
|
|
|
|
|
foreach ($arrId as $key => $id) {
|
|
foreach ($arrId as $key => $id) {
|
|
|
# code...
|
|
# code...
|
|
|
$result = DhammaTerm::where('id', $id)
|
|
$result = DhammaTerm::where('id', $id)
|
|
|
- ->where('owner', $user_uid)
|
|
|
|
|
|
|
+ ->where('owner', $user['user_uid'])
|
|
|
->delete();
|
|
->delete();
|
|
|
if($result){
|
|
if($result){
|
|
|
$count++;
|
|
$count++;
|
|
@@ -299,4 +363,113 @@ class DhammaTermController extends Controller
|
|
|
|
|
|
|
|
return $this->ok($count);
|
|
return $this->ok($count);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ public function export(Request $request){
|
|
|
|
|
+ $user = AuthApi::current($request);
|
|
|
|
|
+ if(!$user){
|
|
|
|
|
+ return $this->error(__('auth.failed'));
|
|
|
|
|
+ }
|
|
|
|
|
+//TODO 判断是否有导出权限
|
|
|
|
|
+ switch ($request->get("view")) {
|
|
|
|
|
+ case 'channel':
|
|
|
|
|
+ # code...
|
|
|
|
|
+ $rows = DhammaTerm::where('channal',$request->get("id"))->cursor();
|
|
|
|
|
+ break;
|
|
|
|
|
+ case 'studio':
|
|
|
|
|
+ # code...
|
|
|
|
|
+ $rows = DhammaTerm::where('channal',$request->get("name"))->cursor();
|
|
|
|
|
+ break;
|
|
|
|
|
+ default:
|
|
|
|
|
+ $this->error('no view');
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ $spreadsheet = new Spreadsheet();
|
|
|
|
|
+ $activeWorksheet = $spreadsheet->getActiveSheet();
|
|
|
|
|
+ $activeWorksheet->setCellValue('A1', 'id');
|
|
|
|
|
+ $activeWorksheet->setCellValue('B1', 'word');
|
|
|
|
|
+ $activeWorksheet->setCellValue('C1', 'meaning');
|
|
|
|
|
+ $activeWorksheet->setCellValue('D1', 'other_meaning');
|
|
|
|
|
+ $activeWorksheet->setCellValue('E1', 'note');
|
|
|
|
|
+ $activeWorksheet->setCellValue('F1', 'tag');
|
|
|
|
|
+ $activeWorksheet->setCellValue('G1', 'language');
|
|
|
|
|
+ $activeWorksheet->setCellValue('H1', 'channel_id');
|
|
|
|
|
+
|
|
|
|
|
+ $currLine = 2;
|
|
|
|
|
+ foreach ($rows as $key => $row) {
|
|
|
|
|
+ # code...
|
|
|
|
|
+ $activeWorksheet->setCellValue("A{$currLine}", $row->guid);
|
|
|
|
|
+ $activeWorksheet->setCellValue("B{$currLine}", $row->word);
|
|
|
|
|
+ $activeWorksheet->setCellValue("C{$currLine}", $row->meaning);
|
|
|
|
|
+ $activeWorksheet->setCellValue("D{$currLine}", $row->other_meaning);
|
|
|
|
|
+ $activeWorksheet->setCellValue("E{$currLine}", $row->note);
|
|
|
|
|
+ $activeWorksheet->setCellValue("F{$currLine}", $row->tag);
|
|
|
|
|
+ $activeWorksheet->setCellValue("G{$currLine}", $row->language);
|
|
|
|
|
+ $activeWorksheet->setCellValue("H{$currLine}", $row->channal);
|
|
|
|
|
+ $currLine++;
|
|
|
|
|
+ }
|
|
|
|
|
+ $writer = new Xlsx($spreadsheet);
|
|
|
|
|
+ $fId = Str::uuid();
|
|
|
|
|
+ $filename = storage_path("app/tmp/{$fId}");
|
|
|
|
|
+ $writer->save($filename);
|
|
|
|
|
+ Cache::put("download/tmp/{$fId}",file_get_contents($filename),300);
|
|
|
|
|
+ unlink($filename);
|
|
|
|
|
+ return $this->ok(['uuid'=>$fId,'filename'=>"term.xlsx",'type'=>"application/vnd.ms-excel"]);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public function import(Request $request){
|
|
|
|
|
+ $user = AuthApi::current($request);
|
|
|
|
|
+ if(!$user){
|
|
|
|
|
+ return $this->error(__('auth.failed'));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ $filename = $request->get('filename');
|
|
|
|
|
+ $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
|
|
|
|
|
+ $reader->setReadDataOnly(true);
|
|
|
|
|
+ $spreadsheet = $reader->load($filename);
|
|
|
|
|
+ $activeWorksheet = $spreadsheet->getActiveSheet();
|
|
|
|
|
+ $currLine = 2;
|
|
|
|
|
+ do {
|
|
|
|
|
+ # code...
|
|
|
|
|
+ $id = $activeWorksheet->getCell("A{$currLine}")->getValue();
|
|
|
|
|
+ $word = $activeWorksheet->getCell("B{$currLine}")->getValue();
|
|
|
|
|
+ $meaning = $activeWorksheet->getCell("C{$currLine}")->getValue();
|
|
|
|
|
+ $other_meaning = $activeWorksheet->getCell("D{$currLine}")->getValue();
|
|
|
|
|
+ $note = $activeWorksheet->getCell("E{$currLine}")->getValue();
|
|
|
|
|
+ $tag = $activeWorksheet->getCell("F{$currLine}")->getValue();
|
|
|
|
|
+ $language = $activeWorksheet->getCell("G{$currLine}")->getValue();
|
|
|
|
|
+ $query = ['word'=>$word,'tag'=>$tag];
|
|
|
|
|
+ switch ($request->get('view')) {
|
|
|
|
|
+ case 'channel':
|
|
|
|
|
+ # code...
|
|
|
|
|
+ $query['channal'] = $request->get('id');
|
|
|
|
|
+ $channel = ChannelApi::getById($request->get('id'));
|
|
|
|
|
+ $owner_id = $channel['studio_id'];
|
|
|
|
|
+ $lang = $channel['lang'];
|
|
|
|
|
+ break;
|
|
|
|
|
+ case 'studio':
|
|
|
|
|
+ # code...
|
|
|
|
|
+ break;
|
|
|
|
|
+ default:
|
|
|
|
|
+ # code...
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if(!empty($word)){
|
|
|
|
|
+ $row = DhammaTerm::firstOrNew($query);
|
|
|
|
|
+ $row->word_en = Tools::getWordEn($word);
|
|
|
|
|
+ $row->meaning = $meaning;
|
|
|
|
|
+ $row->other_meaning = $other_meaning;
|
|
|
|
|
+ $row->note = $note;
|
|
|
|
|
+ $row->language = $lang;
|
|
|
|
|
+ $row->owner = $owner_id;
|
|
|
|
|
+ $row->editor_id = $user['user_id'];
|
|
|
|
|
+ $row->save();
|
|
|
|
|
+ }else{
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ $currLine++;
|
|
|
|
|
+ } while (!empty($ending));
|
|
|
|
|
+ return $this->ok($currLine-2);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|