$this->uid, "title" => $this->title, "subtitle" => $this->subtitle, "summary" => $this->summary, "studio" => StudioApi::getById($this->owner), "editor" => UserApi::getById($this->editor_id), "status" => $this->status, "lang" => $this->lang, "parent_uid" => $this->parent, "created_at" => $this->created_at, "updated_at" => $this->updated_at, ]; $user = AuthApi::current($request); if ($user) { $canEdit = ArticleController::userCanEdit($user['user_uid'], $this); if ($canEdit) { $data['role'] = 'editor'; } } //查询该文章在哪些文集中出现 $collectionCount = ArticleCollection::where('article_id', $this->uid)->count(); if ($collectionCount > 0) { $data['anthology_count'] = $collectionCount; $collection = ArticleCollection::where('article_id', $this->uid)->first(); $data['anthology_first'] = Collection::find($collection->collect_id); } if ($request->has('anthology') && Str::isUuid($request->input('anthology'))) { $anthology = Collection::where('uid', $request->input('anthology'))->first(); } //渲染简化版标题 $channels = []; if ($request->has('channel')) { //有channel $channels = explode('_', $request->input('channel')); } else if (isset($anthology) && $anthology && !empty($anthology->default_channel)) { //没有channel,使用文集channel $channels[] = $anthology->default_channel; } $mdRender = new MdRender(['format' => 'simple']); //path if ($request->has('anthology') && Str::isUuid($request->input('anthology'))) { $data['path'] = array(); if (isset($anthology) && $anthology) { $data['path'][] = [ 'key' => $anthology->uid, 'title' => $anthology->title, 'level' => 0 ]; } $currLevel = -1; $aList = ArticleCollection::where('collect_id', $request->input('anthology')) ->orderBy('id', 'desc') ->select(['article_id', 'title', 'level'])->get(); $path = array(); foreach ($aList as $article) { if ( $article->article_id === $this->uid || ($currLevel >= 0 && $article->level < $currLevel) ) { $currLevel = $article->level; $path[] = [ 'key' => $article->article_id, 'title' => $mdRender->convert($article->title, $channels), 'level' => $article->level ]; } } for ($i = count($path) - 1; $i >= 0; $i--) { $data['path'][] = $path[$i]; } //下级目录 $level = -1; $subToc = array(); for ($i = count($aList) - 1; $i >= 0; $i--) { $article = $aList[$i]; if ($level >= 0) { if ($article->level > $level) { $subToc[] = [ "key" => $article->article_id, "title" => $mdRender->convert($article->title, $channels), "level" => $article->level ]; } else { break; } } if ($article->article_id === $this->uid) { $level = $article->level; } } $data['toc'] = $subToc; } $data['title_text'] = $mdRender->convert($this->title, $channels); //render html $channels = array(); if (isset($this->content) && !empty($this->content)) { if ($request->has('channel')) { $channels = explode('_', $request->input('channel')); } else if ($request->has('anthology')) { $defaultChannel = Collection::where('uid', $request->input('anthology')) ->value('default_channel'); if ($defaultChannel) { $channels[] = $defaultChannel; } } if (count($channels) === 0) { //查找用户默认channel $studioChannel = Channel::where('owner_uid', $this->owner) ->where('type', 'translation') ->get(); if ($studioChannel) { $channelId = $studioChannel[0]->uid; $channels = [$channelId]; } else { $channelId = ChannelApi::getSysChannel( '_community_translation_' . strtolower($this->lang) . '_', '_community_translation_en_' ); if ($channelId) { $channels = [$channelId]; } } } $data["content"] = $this->content; $data["content_type"] = $this->content_type; $query_id = null; if ($request->has('course')) { if ($request->has('exercise')) { $query_id = $request->input('exercise'); if ($request->has('user')) { /** * 显示指定用户作业 * 查询用户在课程中的channel */ $userId = UserApi::getIdByName($request->input('user')); $userInCourse = CourseMember::where('course_id', $request->input('course')) ->where('user_id', $userId) ->first(); if ($userInCourse) { $channelId = $userInCourse->channel_id; $channels = [$channelId]; } } else if ($request->input('view') === "answer") { /** * 显示答案 * 算法:查询course 答案 channel */ $channelId = Course::where('id', $request->input('course'))->value('channel_id'); $channels = [$channelId]; } else { //显示答案 $channelId = Course::where('id', $request->input('course'))->value('channel_id'); $channels = [$channelId]; } } else { $channelId = Course::where('id', $request->input('course'))->value('channel_id'); $channels = [$channelId]; } } $mode = $request->input('mode', 'read'); $format = $request->input('format', 'react'); $htmlRender = new MdRender([ 'mode' => $mode, 'format' => $format, 'footnote' => true, 'origin' => $request->input('origin', true), 'paragraph' => $request->input('paragraph', false), ]); //Log::debug('article render',['content'=>$this->content,'format'=>$format,'html'=>$html]); $data["html"] = $htmlRender->convert($this->content, $channels); if (empty($this->summary)) { $data["_summary"] = MdRender::render( $this->content, $channels, $query_id, $mode, 'translation', 'markdown', 'text' ); } } return $data; } }