381 lines
No EOL
14 KiB
PHP
Executable file
381 lines
No EOL
14 KiB
PHP
Executable file
<?php
|
|
|
|
namespace App\Http\Controllers\IQ;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
|
|
use App\Models\AnswerQuestion;
|
|
use App\Models\IQContentFaq;
|
|
use App\Models\IQContentSite;
|
|
use App\Models\IQContentTree;
|
|
use App\Models\IQContentTreeNode;
|
|
use App\Models\TravelGuide;
|
|
use App\Models\TravelPageGuide;
|
|
use App\Repositories\IQ\ContentSiteRepository;
|
|
use Illuminate\Support\Collection;
|
|
use IqContent\LaravelFilemanager\Lfm;
|
|
use Request;
|
|
use Validator;
|
|
|
|
class ContentTreeController extends Controller
|
|
{
|
|
|
|
protected $contentSiteRepo;
|
|
/**
|
|
* ContentSiteController constructor.
|
|
*/
|
|
public function __construct(ContentSiteRepository $contentSiteRepo)
|
|
{
|
|
$this->middleware(['admin', '2fa']);
|
|
$this->contentSiteRepo = $contentSiteRepo;
|
|
}
|
|
|
|
/**
|
|
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
|
*/
|
|
public function index()
|
|
{
|
|
$data = [
|
|
'models' => IQContentTree::all(),
|
|
];
|
|
return view('cms.travel_guide.tree', $data);
|
|
}
|
|
|
|
|
|
public function detail($id, $node_id = false, $section_id = false)
|
|
{
|
|
$model = IQContentTree::findOrFail($id);
|
|
$tree_node = IQContentTreeNode::find($node_id);
|
|
$area_section = false;
|
|
$site_fields = false;
|
|
if($section_id){
|
|
/*
|
|
* $area_section = IQContentAreaSection::findOrFail($area_section_id);
|
|
$site_fields = $this->contentSiteRepo->siteFieldPrepare($tree_node->iq_content_site, $area_section);
|
|
*/
|
|
}
|
|
$data = [
|
|
'model' => $model,
|
|
'site_fields' => $site_fields,
|
|
'tree_node' => $tree_node,
|
|
'id' => $id,
|
|
'section' => false,
|
|
'lfm_helper' => app(Lfm::class),
|
|
|
|
];
|
|
return view('cms.travel_guide.tree-detail', $data);
|
|
}
|
|
|
|
public function repair($id=1){
|
|
|
|
|
|
|
|
die();
|
|
$model = IQContentTree::findOrFail($id);
|
|
$travel_guide_pages = TravelPageGuide::getPageGuides($model->root_id);
|
|
$page_parent_id = [];
|
|
$pos = 1;
|
|
$tree_node = new IQContentTreeNode();
|
|
foreach ($travel_guide_pages as $guide_page){
|
|
|
|
$slug = $guide_page->slug;
|
|
|
|
if(TravelGuide::whereSlug($slug)->count()){
|
|
$slug = "";
|
|
}
|
|
//make travel Guide
|
|
$description = substr($guide_page->description, 0, 255);
|
|
$description = substr($guide_page->description, 0, strrpos($description, " "));
|
|
|
|
$keywords = substr($guide_page->keywords, 0, 255);
|
|
$keywords = substr($guide_page->keywords, 0, strrpos($keywords, " "));
|
|
$data = [
|
|
'active' => $guide_page->status ? true : false,
|
|
'scope' => false,
|
|
'name' => $guide_page->title,
|
|
'slug' => $slug,
|
|
'text' => "page_id:".$guide_page->id,
|
|
'full_text' => $guide_page->content_new,
|
|
'keyword' => $guide_page->keyword,
|
|
'meta_title' => $guide_page->pagetitle,
|
|
'meta_description' => $description,
|
|
'meta_keywords' => $keywords,
|
|
'country_id' => $guide_page->country_id,
|
|
'box_image_url' => $guide_page->box_image_url,
|
|
|
|
];
|
|
$TravelGuide = TravelGuide::create($data);
|
|
|
|
|
|
if(!isset($page_parent_id[$guide_page->parent_id])){
|
|
$page_parent_id[$guide_page->parent_id] = $tree_node->id;
|
|
}
|
|
if($guide_page->lvl == 1){
|
|
$pos = 0;
|
|
$parent_id = null;
|
|
}else{
|
|
$pos++;
|
|
$parent_id = $page_parent_id[$guide_page->parent_id];
|
|
|
|
}
|
|
$lvl = $guide_page->lvl-1;
|
|
//make tree node
|
|
$tree_data = [
|
|
'tree_id' => $model->id,
|
|
'parent_id' => $parent_id,
|
|
'lvl' => $lvl,
|
|
'name' => $guide_page->title,
|
|
'identifier' => $guide_page->slug,
|
|
'settings' => "page_id:".$guide_page->id,
|
|
'pos' => $pos,
|
|
'active' => $guide_page->status ? true : false,
|
|
];
|
|
$tree_node = IQContentTreeNode::create($tree_data);
|
|
|
|
|
|
IQContentSite::create(['tree_node_id'=>$tree_node->id, 'travel_guide_id'=>$TravelGuide->id]);
|
|
|
|
if($guide_page->travel_guide_content_id > 0){
|
|
$TravelGuide = TravelGuide::find($guide_page->travel_guide_content_id);
|
|
if($TravelGuide){
|
|
IQContentSite::create(['tree_node_id'=>$tree_node->id, 'travel_guide_id'=>$TravelGuide->id]);
|
|
}
|
|
}
|
|
|
|
}
|
|
die("--");
|
|
|
|
}
|
|
|
|
public function store($id, $node_id = false, $area_section_id = false)
|
|
{
|
|
$data = Request::all();
|
|
|
|
//from ajax
|
|
if(isset($data['action'])){
|
|
//set node active on off
|
|
if($data['action'] == 'node-set-active'){
|
|
//$model = IQContentTree::findOrFail($id);
|
|
$tree_node = IQContentTreeNode::findOrFail($node_id);
|
|
if($tree_node->active){
|
|
$tree_node->active = false;
|
|
|
|
}else{
|
|
$tree_node->active = true;
|
|
}
|
|
$tree_node->save();
|
|
return response()->json(['success' => 'tree-node-active', 'data'=>$tree_node->active], 200);
|
|
}
|
|
}
|
|
|
|
|
|
//new sort / save nestable
|
|
if(isset($data['nestable-output'])){
|
|
$model = IQContentTree::findOrFail($id);
|
|
$model->updated_at = now();
|
|
$model->save();
|
|
$this->saveNestableOutput($model, json_decode($data['nestable-output']));
|
|
|
|
\Session()->flash('alert-save', '1');
|
|
return redirect(route('iq_content_tree_detail', [$model->id]));
|
|
}
|
|
|
|
|
|
if(isset($data['iq_content_site_field']) && is_array($data['iq_content_site_field'])){
|
|
$model = IQContentTree::findOrFail($id);
|
|
$model->updated_at = now();
|
|
$model->save();
|
|
$this->contentSiteRepo->storeContentSideFields($data['iq_content_site_field']);
|
|
\Session()->flash('alert-save', '1');
|
|
return redirect(route('iq_content_tree_detail', [$model->id, $node_id, $area_section_id]));
|
|
}
|
|
|
|
|
|
|
|
$rules = array(
|
|
'name' => 'required',
|
|
);
|
|
$validator = Validator::make(Request::all(), $rules);
|
|
if ($validator->fails()) {
|
|
return back()->withErrors($validator);
|
|
}
|
|
$data['user_id'] = \Auth::user()->id;
|
|
$data['active'] = isset($data['active']) ? true : false;
|
|
$data['search'] = isset($data['search']) ? true : false;
|
|
if (isset($data['action'])) {
|
|
switch ($data['action']) {
|
|
case 'tree-content' :
|
|
if($data['id'] == 0){
|
|
$model = IQContentTree::create($data);
|
|
}else{
|
|
$model = IQContentTree::find($data['id']);
|
|
$model->fill($data);
|
|
$model->save();
|
|
}
|
|
\Session()->flash('alert-save', '1');
|
|
return redirect(route('iq_content_tree_detail', [$model->id]));
|
|
break;
|
|
|
|
case 'tree-node' :
|
|
$model = IQContentTree::findOrFail($id);
|
|
$model->updated_at = now();
|
|
$model->save();
|
|
|
|
if($data['id'] == 0){
|
|
$tree_node = IQContentTreeNode::create($data);
|
|
}else{
|
|
$tree_node = IQContentTreeNode::find($data['id']);
|
|
$tree_node->fill($data);
|
|
$tree_node->save();
|
|
}
|
|
\Session()->flash('alert-save', '1');
|
|
return redirect(route('iq_content_tree_detail', [$model->id, $tree_node->id]));
|
|
break;
|
|
|
|
case 'tree-site-content' :
|
|
$model = IQContentTree::findOrFail($id);
|
|
$model->updated_at = now();
|
|
$model->save();
|
|
|
|
$tree_node = IQContentTreeNode::findOrFail($node_id);
|
|
$travel_guide = TravelGuide::findOrFail($data['travel_guide_id']);
|
|
|
|
if(IQContentSite::whereTreeNodeId($tree_node->id)->whereTravelGuideId($travel_guide->id)->count() == 0){
|
|
IQContentSite::create(['tree_node_id'=>$tree_node->id, 'travel_guide_id'=>$travel_guide->id]);
|
|
\Session()->flash('alert-save', '1');
|
|
}else{
|
|
\Session()->flash('alert-error', 'Eintrag schon vorhanden');
|
|
}
|
|
return redirect(route('iq_content_tree_detail', [$id, $node_id]));
|
|
break;
|
|
|
|
case 'add-answer-question' :
|
|
$model = IQContentTree::findOrFail($id);
|
|
$model->updated_at = now();
|
|
$model->save();
|
|
|
|
$tree_node = IQContentTreeNode::findOrFail($node_id);
|
|
$faq = AnswerQuestion::findOrFail($data['modal_faq_id']);
|
|
|
|
if(IQContentFaq::whereTreeNodeId($tree_node->id)->whereFaqId($faq->id)->count() == 0){
|
|
IQContentFaq::create(['tree_node_id'=>$tree_node->id, 'faq_id'=>$faq->id]);
|
|
\Session()->flash('alert-save', '1');
|
|
}else{
|
|
\Session()->flash('alert-error', 'Eintrag schon vorhanden');
|
|
}
|
|
return redirect(route('iq_content_tree_detail', [$id, $node_id]));
|
|
break;
|
|
|
|
case 'guide-tree-site' :
|
|
$model = IQContentTree::findOrFail($id);
|
|
$model->updated_at = now();
|
|
$model->save();
|
|
|
|
$tree_node = IQContentTreeNode::findOrFail($data['tree_node_id']);
|
|
$travel_guide = TravelGuide::findOrFail($data['travel_guide_id']);
|
|
|
|
if(IQContentSite::whereTreeNodeId($tree_node->id)->whereTravelGuideId($travel_guide->id)->count() == 0){
|
|
IQContentSite::create(['tree_node_id'=>$tree_node->id, 'travel_guide_id'=>$travel_guide->id]);
|
|
\Session()->flash('alert-save', '1');
|
|
}else{
|
|
\Session()->flash('alert-error', 'Eintrag schon vorhanden');
|
|
}
|
|
return redirect(route('cms_travel_guide_detail', [$travel_guide->id]));
|
|
break;
|
|
case 'site-travel-identifier' :
|
|
$model = IQContentTree::findOrFail($id);
|
|
$model->updated_at = now();
|
|
$model->save();
|
|
|
|
$tree_node = IQContentTreeNode::findOrFail($node_id);
|
|
|
|
$content_site = IQContentSite::findOrFail($data['id']);
|
|
$content_site->identifier = $data['identifier'];
|
|
$content_site->save();
|
|
|
|
\Session()->flash('alert-save', '1');
|
|
return redirect(route('iq_content_tree_detail', [$id, $node_id]));
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public function delete($id, $node_id = false, $section_id = false){
|
|
//TODO delete Node not the tree....
|
|
$model = IQContentTree::findOrFail($id);
|
|
$tree_node = IQContentTreeNode::find($node_id);
|
|
|
|
if($tree_node){
|
|
$this->recrusiveDelete($id, $tree_node->id);
|
|
$tree_node->delete();
|
|
\Session()->flash('alert-success', __('Tree Node gelöscht'));
|
|
|
|
}
|
|
return redirect(route('iq_content_tree_detail', [$id]));
|
|
}
|
|
|
|
public function recrusiveDelete($id, $node_id = false, $section_id = false){
|
|
|
|
$model = IQContentTree::findOrFail($id);
|
|
$tree_node = IQContentTreeNode::find($node_id);
|
|
if($tree_node){
|
|
if($tree_node->iq_content_tree_node_childs->count()){
|
|
foreach ($tree_node->iq_content_tree_node_childs as $child){
|
|
$this->recrusiveDelete($id, $child->id);
|
|
$child->delete();
|
|
|
|
}
|
|
}
|
|
if($tree_node->iq_content_sites->count()){
|
|
foreach ($tree_node->iq_content_sites as $site){
|
|
$site->delete();
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public function remove($action, $id, $node_id, $remove_id, $r='tree'){
|
|
$tree = IQContentTree::findOrFail($id);
|
|
$tree_node = IQContentTreeNode::findOrFail($node_id);
|
|
|
|
if($action === 'guide'){
|
|
$model = TravelGuide::findOrFail($remove_id);
|
|
$iq_content_site = IQContentSite::whereTreeNodeId($tree_node->id)->whereTravelGuideId($model->id)->first();
|
|
$iq_content_site->delete();
|
|
\Session()->flash('alert-success', __('Seite aus Tree entfernt.'));
|
|
}
|
|
|
|
if($action === 'faq'){
|
|
$model = AnswerQuestion::findOrFail($remove_id);
|
|
$iq_content_site = IQContentFaq::whereTreeNodeId($tree_node->id)->whereFaqId($model->id)->first();
|
|
$iq_content_site->delete();
|
|
\Session()->flash('alert-success', __('Seite aus Tree entfernt.'));
|
|
}
|
|
|
|
if($r === "guide"){
|
|
return redirect(route('cms_travel_guide_detail', [$model->id]));
|
|
}
|
|
|
|
return redirect(route('iq_content_tree_detail', [$tree->id, $tree_node->id]));
|
|
|
|
|
|
}
|
|
|
|
private function saveNestableOutput(IQContentTree $contentTree, $list, $pos=0, $lvl = 0, $parent_id = null){
|
|
|
|
foreach ($list as $item){
|
|
$tree_node = IQContentTreeNode::find($item->id);
|
|
$tree_node->lvl = $lvl;
|
|
$tree_node->parent_id = $parent_id;
|
|
$tree_node->pos = $pos++;
|
|
$tree_node->save();
|
|
if(isset($item->children)) {
|
|
$this->saveNestableOutput($contentTree, $item->children, $pos, $lvl + 1, $tree_node->id);
|
|
}
|
|
|
|
}
|
|
}
|
|
} |