276 lines
No EOL
11 KiB
PHP
Executable file
276 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($data);
|
|
//$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($data);
|
|
//$passolution->fill($data);
|
|
$html = $passolution->read(true);
|
|
return response()->json(['success' => true,
|
|
"response" => $html,
|
|
"pdf"=> $passolution->getPdfPath(['filename', 'url']),
|
|
"additionalContent" => $passolution->additionalContent,
|
|
"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;
|
|
}
|
|
} |