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; } }