206 lines
No EOL
9 KiB
PHP
Executable file
206 lines
No EOL
9 KiB
PHP
Executable file
<?php
|
|
|
|
namespace App\Http\Controllers\API;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\IQContentTree;
|
|
use App\Models\IQContentTreeNode;
|
|
use App\Models\TravelGuide;
|
|
|
|
|
|
class CMSContentController extends Controller
|
|
{
|
|
private $successStatus = 200;
|
|
private $successKey = 'f6077389c9ce710e554763a5de02c8ec';
|
|
|
|
|
|
public function search()
|
|
{
|
|
|
|
$request = \Request::all();
|
|
|
|
if(!isset($request['url']) || !isset($request['key'])){
|
|
return response()->json(['error' => "request no found"], $this->successStatus);
|
|
}
|
|
|
|
if($request['key'] !== $this->successKey){
|
|
return response()->json(['error' => "key"], 401);
|
|
}
|
|
|
|
$urlArray = explode('/', $request['url']);
|
|
$ret = [];
|
|
|
|
if(is_array($urlArray)){
|
|
//tree
|
|
$tree_identifier = array_shift($urlArray);
|
|
$tree = IQContentTree::whereIdentifier($tree_identifier)->first();
|
|
$travel_guide = null;
|
|
$url = "";
|
|
$ret['title'] = "";
|
|
$ret['description'] = "";
|
|
if($tree){
|
|
$lvl = 0;
|
|
$ret['tree'] = $tree->toArray();
|
|
$ret['navi'] = $this->makeNaviTree($tree, $urlArray, "", 0, false);
|
|
|
|
$url = "/".$tree->identifier;
|
|
$ret['bread_crumb'][$lvl] = [
|
|
'title' => $tree->name,
|
|
'url' => $url,
|
|
];
|
|
while (!empty($urlArray))
|
|
{
|
|
$tree_node_identifier = array_shift($urlArray);
|
|
$tree_node = IQContentTreeNode::whereTreeId($tree->id)->whereIdentifier($tree_node_identifier)->whereLvl($lvl)->whereActive(true)->first();
|
|
|
|
if($tree_node){
|
|
$lvl ++;
|
|
$ret['title'] = $tree_node->title;
|
|
$ret['country_id'] = null;
|
|
$ret['description'] = $tree_node->description;;
|
|
$url = $url."/".$tree_node->identifier;
|
|
$ret['bread_crumb'][$lvl] = [
|
|
'title' => $tree_node->name,
|
|
'url' => $url,
|
|
];
|
|
$ret['nodes'][$lvl] = $tree_node->toArray();
|
|
$ret['nodes_active'] = $tree_node->toArray();
|
|
}else{
|
|
return response()->json(['error' => 'no-node'], $this->successStatus);
|
|
}
|
|
}
|
|
|
|
if(isset($ret['nodes']) && is_array($ret['nodes'])){
|
|
//sites
|
|
if($tree_node->iq_content_sites->count()){
|
|
foreach ($tree_node->iq_content_sites as $iq_content_site){
|
|
if(isset($iq_content_site->travel_guide) && $iq_content_site->travel_guide && $iq_content_site->travel_guide->active){
|
|
if($iq_content_site->travel_guide->country_id !== null){
|
|
$ret['country_id'] = $iq_content_site->travel_guide->country_id;
|
|
|
|
}
|
|
//$key = ($iq_content_site->travel_guide->scope -1) *-1;
|
|
//$ret['sites'][$key] = $iq_content_site->travel_guide->toArray();
|
|
if($iq_content_site->identifier){
|
|
$ret['sites'][$iq_content_site->identifier] = [
|
|
'name' => $iq_content_site->travel_guide->name,
|
|
'full_text' => $iq_content_site->travel_guide->full_text
|
|
];
|
|
|
|
if($iq_content_site->travel_guide->author){
|
|
$ret['sites'][$iq_content_site->identifier]['author_name'] = $iq_content_site->travel_guide->author->name;
|
|
$ret['sites'][$iq_content_site->identifier]['author_description'] = $iq_content_site->travel_guide->author->description;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//faq
|
|
if($tree_node->iq_content_faqs->count()){
|
|
foreach ($tree_node->iq_content_faqs as $iq_content_faq){
|
|
if($iq_content_faq->answer_question && $iq_content_faq->answer_question->active){
|
|
$ret['faqs'][] = [
|
|
'id' => $iq_content_faq->answer_question->id,
|
|
'question' => $iq_content_faq->answer_question->question,
|
|
'answer_text' => $iq_content_faq->answer_question->answer_text
|
|
];
|
|
}
|
|
}
|
|
}
|
|
//children
|
|
if($tree_node->iq_content_tree_node_childs->count()){
|
|
foreach ($tree_node->iq_content_tree_node_childs as $iq_content_tree_node_child){
|
|
if($iq_content_tree_node_child->active){
|
|
$travel_guide = $iq_content_tree_node_child->iq_content_site_first();
|
|
|
|
$description = $iq_content_tree_node_child->description;
|
|
if(!$description){
|
|
$description = $travel_guide ? $travel_guide->meta_description : '';
|
|
}
|
|
$ret['children'][] = [
|
|
'name' => $iq_content_tree_node_child->name,
|
|
'identifier' => $iq_content_tree_node_child->identifier,
|
|
'url' => "/".$iq_content_tree_node_child->getUri(),
|
|
'box_image_url' => isset($iq_content_tree_node_child->image['thumb_url']) ? $iq_content_tree_node_child->image['thumb_url'] : '',
|
|
'description' => $description,
|
|
'active' => $travel_guide ? $travel_guide->active : false,
|
|
];
|
|
}
|
|
}
|
|
}
|
|
return response()->json(['success' => "node", "ret"=>$ret], $this->successStatus);
|
|
|
|
}else{
|
|
return response()->json(['error' => 'no-node'], $this->successStatus);
|
|
}
|
|
}else{
|
|
return response()->json(['error' => 'no-tree'], $this->successStatus);
|
|
|
|
}
|
|
}
|
|
return response()->json(['error' => "not-found"], $this->successStatus);
|
|
|
|
}
|
|
|
|
public function keywords(){
|
|
$request = \Request::all();
|
|
|
|
if(!isset($request['key'])){
|
|
return response()->json(['error' => "request no found"], $this->successStatus);
|
|
}
|
|
|
|
if($request['key'] != 'f6077389c9ce710e554763a5de02c8ec'){
|
|
return response()->json(['error' => "key"], 401);
|
|
}
|
|
$ret = [];
|
|
$travel_guides = TravelGuide::whereNotNull('keyword')->where('active', true)->get();
|
|
foreach ($travel_guides as $travel_guide){
|
|
$tree_node = $travel_guide->iq_content_tree_node_first();
|
|
if($tree_node){
|
|
$ret[$travel_guide->keyword] = $tree_node->getUri();
|
|
}
|
|
|
|
}
|
|
return response()->json(['success' => "node", "ret"=>$ret], $this->successStatus);
|
|
}
|
|
|
|
public function makeNaviTree(IQContentTree $iq_content_tree, $urlArray = [], $url = "", $lvl = 0, $parent_id = false)
|
|
{
|
|
|
|
$link = false;
|
|
if (!empty($urlArray[$lvl])) {
|
|
$link = ($urlArray[$lvl]);
|
|
}
|
|
if ($parent_id) {
|
|
$tree_nodes = IQContentTreeNode::where('tree_id', $iq_content_tree->id)->where('lvl', $lvl)->where('active', true)->where('parent_id', $parent_id)->orderBy('pos', 'ASC')->get();
|
|
} else {
|
|
$url = "/" . $iq_content_tree->identifier . "/";
|
|
$tree_nodes = IQContentTreeNode::where('tree_id', $iq_content_tree->id)->where('lvl', $lvl)->where('active', true)->orderBy('pos', 'ASC')->get();
|
|
}
|
|
$out = [];
|
|
|
|
|
|
foreach ($tree_nodes as $node) {
|
|
|
|
$children = IQContentTreeNode::where('tree_id', $iq_content_tree->id)->where('lvl', $lvl + 1)->where('active', true)->where('parent_id', $node->id)->count();
|
|
$out[] = [
|
|
'lvl' => $lvl,
|
|
'name' => $node->name,
|
|
'url' => $url . $node->identifier,
|
|
'active' => $link == $node->identifier ? true : false,
|
|
// 'children' => $this->makeNaviTree($iq_content_tree, $urlArray, $url . $node->identifier . "/", $lvl + 1, $node->id),
|
|
];
|
|
|
|
$tmp = [];
|
|
if ($children) {
|
|
$tmp = $this->makeNaviTree($iq_content_tree, $urlArray, $url . $node->identifier . "/", $lvl + 1, $node->id);
|
|
$out = array_merge($out, $tmp);
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
return $out;
|
|
}
|
|
} |