mein-sterntours/app/Http/Controllers/API/CMSContentController.php
2020-09-15 17:47:52 +02:00

273 lines
No EOL
11 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\TravelCountry;
use App\Models\TravelGuide;
use App\Models\TravelNationality;
use App\Services\Passolution;
class CMSContentController extends Controller
{
private $successStatus = 200;
private $successKey = 'f6077389c9ce710e554763a5de02c8ec';
public function passolution($lang, $nat, $destco, $tdat){
$data = [
'lang' => $lang,
'nat' => $nat,
'destco' => $destco,
'tdat' => $tdat,
];
$passolution = new Passolution();
$passolution->fill($data);
$html = $passolution->read();
return response()->json(['response' => $html]);
}
public function passolutionPost($lang){
$data = \Request::all();
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: *');
header('Access-Control-Allow-Headers: *');
$headers = [
'Access-Control-Allow-Methods' => 'POST,GET,OPTIONS,PUT,DELETE',
'Access-Control-Allow-Headers' => 'Content-Type, X-Auth-Token, Origin, Authorization',
];
if(!isset($data['nationality_id']) || !isset($data['travel_date_start']) || !isset($data['country_ids']) || !is_array($data['country_ids'])){
return response()->json(['response' => 'Fehler bei der Anfrage'], 200, $headers);
}
$TravelNationality = TravelNationality::find($data['nationality_id']);
if(!$TravelNationality){
return response()->json(['response' => 'Fehler bei der Anfrage: Nationalität nicht gefunden'], 200, $headers);
}
$destco = [];
foreach ($data['country_ids'] as $country_id){
$TravelCountry = TravelCountry::find($country_id);
if(!$TravelCountry){
return response()->json(['response' => 'Fehler bei der Anfrage: Travel Country nicht gefunden'], 200, $headers);
}
$destco[] = $TravelCountry->destco;
}
$tdat = date("d-m-Y", strtotime($data['travel_date_start']));
$data = [
'lang' => $lang,
'nat' => $TravelNationality->nat,
'destco' => trim(implode(',', $destco), ","),
'tdat' => $tdat,
];
$passolution = new Passolution();
$passolution->fill($data);
$html = $passolution->read();
return response()->json(['success' => true, "response" => $html, "data" => $data], 200, $headers);
}
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;
}
}