getParam("word", 1);
$props = $this->getTermProps($word, '');
$output = $props['word'];
switch ($this->options['format']) {
case 'react':
$output = [
'props' => base64_encode(\json_encode($props)),
'html' => $props['innerHtml'],
'tag' => 'span',
'tpl' => 'term',
];
break;
case 'unity':
$output = [
'props' => base64_encode(\json_encode($props)),
'tpl' => 'term',
];
break;
case 'html':
if (isset($props["meaning"])) {
$GLOBALS[$this->glossaryKey][$props["word"]] = $props['meaning'];
$key = 'term-' . $props["word"];
$termHead = "" . $props['meaning'] . "";
if (isset($GLOBALS[$key])) {
$output = $termHead;
} else {
$GLOBALS[$key] = 1;
$output = $termHead . '(' . $props["word"] . ')';
}
} else {
$output = $props["word"];
}
break;
case 'text':
if (isset($props["meaning"])) {
$key = 'term-' . $props["word"];
if (isset($GLOBALS[$key])) {
$output = $props["meaning"];
} else {
$GLOBALS[$key] = 1;
$output = $props["meaning"] . '(' . $props["word"] . ')';
}
} else {
$output = $props["word"];
}
break;
case 'tex':
if (isset($props["meaning"])) {
$key = 'term-' . $props["word"];
if (isset($GLOBALS[$key])) {
$output = $props["meaning"];
} else {
$GLOBALS[$key] = 1;
$output = $props["meaning"] . '(' . $props["word"] . ')';
}
} else {
$output = $props["word"];
}
break;
case 'simple':
if (isset($props["meaning"])) {
$output = $props["meaning"];
} else {
$output = $props["word"];
}
break;
case 'markdown':
if (isset($props["meaning"])) {
$key = 'term-' . $props["word"];
if (isset($GLOBALS[$key]) && $GLOBALS[$key] === 1) {
$GLOBALS[$key]++;
$output = $props["meaning"];
} else {
$GLOBALS[$key] = 1;
$output = $props["meaning"] . '(' . $props["word"] . ')';
}
} else {
$output = $props["word"];
}
//如果有内容且第一次出现,显示为脚注
if (!empty($props["note"]) && $GLOBALS[$key] === 1) {
if (isset($GLOBALS['note_sn'])) {
$GLOBALS['note_sn']++;
} else {
$GLOBALS['note_sn'] = 1;
$GLOBALS['note'] = array();
}
$content = $props["note"];
$output .= '[^' . $GLOBALS['note_sn'] . ']';
$GLOBALS['note'][] = [
'sn' => $GLOBALS['note_sn'],
'trigger' => '',
'content' => $content,
];
}
break;
default:
if (isset($props["meaning"])) {
$output = $props["meaning"];
} else {
$output = $props["word"];
}
break;
}
return $output;
}
public function getTermProps($word, $tag = null, $channel = null)
{
if ($channel && !empty($channel)) {
$channelId = $channel;
} else {
if (count($this->options['channel_id']) > 0) {
$channelId = $this->options['channel_id'][0];
} else {
$channelId = null;
}
}
if (count($this->options['channelInfo']) === 0) {
if (!empty($channel)) {
$channelInfo = Channel::where('uid', $channel)->first();
if (!$channelInfo) {
unset($channelInfo);
}
}
if (!isset($channelInfo)) {
Log::warning('channel is null');
$output = [
"word" => $word,
'innerHtml' => '',
];
return $output;
}
} else {
$channelInfo = $this->options['channelInfo'][0];
}
if (Str::isUuid($channelId)) {
$lang = Channel::where('uid', $channelId)->value('lang');
if (!empty($lang)) {
$langFamily = explode('-', $lang)[0];
} else {
$langFamily = 'zh';
}
Log::info("term:{$word} 先查属于这个channel 的", 'term');
Log::info('channel id' . $channelId, 'term');
$table = DhammaTerm::where("word", $word)
->where('channal', $channelId);
if ($tag && !empty($tag)) {
$table = $table->where('tag', $tag);
}
$tplParam = $table->orderBy('updated_at', 'desc')
->first();
$studioId = $channelInfo->owner_uid;
} else {
$tplParam = false;
$lang = '';
$langFamily = '';
$studioId = $this->options['studioId'];
}
if (!$tplParam) {
if (Str::isUuid($studioId)) {
/**
* 没有,再查这个studio的
* 按照语言过滤
* 完全匹配的优先
* 语族匹配也行
*/
Log::debug("没有-再查这个studio的", 'term');
$table = DhammaTerm::where("word", $word);
if (!empty($tag)) {
$table = $table->where('tag', $tag);
}
$termsInStudio = $table->where('owner', $channelInfo->owner_uid)
->orderBy('updated_at', 'desc')
->get();
if (count($termsInStudio) > 0) {
$list = array();
foreach ($termsInStudio as $key => $term) {
if (empty($term->channal)) {
if ($term->language === $lang) {
$list[$term->guid] = 2;
} else if (strpos($term->language, $langFamily) !== false) {
$list[$term->guid] = 1;
}
}
}
if (count($list) > 0) {
arsort($list);
foreach ($list as $key => $one) {
foreach ($termsInStudio as $term) {
if ($term->guid === $key) {
$tplParam = $term;
break;
}
}
break;
}
}
}
}
}
if (!$tplParam) {
Log::debug("没有,再查社区", 'term');
$community_channel = ChannelApi::getSysChannel("_community_term_zh-hans_");
$table = DhammaTerm::where("word", $word);
if (!empty($tag)) {
$table = $table->where('tag', $tag);
}
$tplParam = $table->where('channal', $community_channel)
->first();
if ($tplParam) {
$isCommunity = true;
} else {
Log::debug("查社区没有", 'term');
}
}
$output = [
"word" => $word,
"parentChannelId" => $channelId,
"parentStudioId" => $channelInfo->owner_uid,
];
$innerString = $output["word"];
if ($tplParam) {
$output["id"] = $tplParam->guid;
$output["meaning"] = $tplParam->meaning;
$output["channel"] = $tplParam->channal;
if (!empty($tplParam->note)) {
$mdRender = new MdRender(['format' => $this->options['format']]);
$output['note'] = $mdRender->convert($tplParam->note, $this->options['channel_id']);
}
if (isset($isCommunity)) {
$output["isCommunity"] = true;
}
$innerString = "{$output["meaning"]}({$output["word"]})";
if (!empty($tplParam->other_meaning)) {
$output["meaning2"] = $tplParam->other_meaning;
}
}
$output['innerHtml'] = $innerString;
return $output;
}
}