Tree Travel Guide

This commit is contained in:
Kevin Adametz 2019-07-20 15:55:00 +02:00
parent a1ca534f55
commit 1f340e96fa
78 changed files with 4133 additions and 1027 deletions

View file

@ -4,6 +4,8 @@ namespace App\Http\Controllers\CMS;
use App\Http\Controllers\Controller;
use App\Models\IQContentTree;
use App\Models\IQContentTreeNode;
use App\Models\TravelGuide;
use App\Models\TravelPageGuide;
use AppBundle\Util;
@ -47,12 +49,16 @@ class CMSTravelGuideController extends Controller
public function page()
{
//make tree
$data = [
'travel_guide_pages' => TravelPageGuide::getPageGuides(),
];
return view('cms.travel_guide.page', $data);
}
public function detail($id)
{
if($id == "new") {
@ -78,7 +84,6 @@ class CMSTravelGuideController extends Controller
}
public function cleanHTML($html)
{

View file

@ -0,0 +1,274 @@
<?php
namespace App\Http\Controllers\IQ;
use App\Http\Controllers\Controller;
use App\Models\IQContentArea;
use App\Models\IQContentAreaSection;
use App\Models\IQContentModel;
use App\Models\IQContentModelField;
use App\Models\IQContentSite;
use App\Models\IQContentTree;
use App\Models\IQContentTreeNode;
use Illuminate\Database\Eloquent\Collection;
use Request;
use Input;
class ContentModalController extends Controller
{
/**
* ContentSiteController constructor.
*/
public function __construct()
{
// $this->middleware('auth');
}
/**
* @return \Illuminate\Http\JsonResponse
* @throws \Throwable
* data = id, model, action, request
*/
public function load()
{
if(\Request::ajax()){
$data = Input::all();
$ret = "";
if(isset($data['model']) && isset($data['id']) ){
switch ($data['model']){
case 'model' :
$ret = $this->loadModal($data);
break;
case 'area' :
$ret = $this->loadModal($data);
break;
case 'media' :
break;
case 'site' :
$ret = $this->loadModal($data);
break;
case 'tree' :
$ret = $this->loadModal($data);
break;
}
}
return response()->json(['response' => $data, 'html'=>$ret]);
}
}
private function loadModal($data)
{
if(isset($data['action'])){
switch ($data['action']){
case 'model-content' :
return $this->actionModelContent($data);
break;
case 'model-field' :
return $this->actionModelField($data);
break;
case 'model-field-details' :
return $this->actionModelFieldDetail($data);
break;
case 'area-content' :
return $this->actionArea($data);
break;
case 'area-section' :
return $this->actionAreaSection($data);
break;
case 'site-content' :
return $this->actionSiteContent($data);
break;
case 'tree-content' :
return $this->actionTreeContent($data);
break;
case 'tree-node' :
return $this->actionTreeNode($data);
break;
case 'tree-site-content' :
return $this->actionTreeSiteContent($data);
break;
}
}
}
/*
* Model
*/
private function actionModelContent($data)
{
if($data['id'] == "add"){
$value = new IQContentModel();
$value->id = "add";
$value->active = true;
$data['title'] = "Add Model";
}else {
$value = IQContentModel::findOrFail($data['id']);
$data['title'] = "Edit Model: ".$value->name;
}
$url = route('iq_content_model_detail', [$value->id]);
return view("iq.modal.content", compact('data','value', 'url') )->render();
}
private function actionModelField($data)
{
$value = new Collection();
$value->id = $data['id'];
if(isset($data['request']['model_id'])){
$model = IQContentModel::findOrFail($data['request']['model_id']);
return view("iq.modal.model-field", compact('data','value', 'model') )->render();
}
return view("iq.modal.model-field", compact('data','value') )->render();
}
private function actionModelFieldDetail($data)
{
if(!isset($data['request']['model_id'])){
//need 404 error page
}
$model = IQContentModel::findOrFail($data['request']['model_id']);
$data['field'] = '';
switch ($data['request']['field']){
case 'text' :
$data['field'] = 'Long Text';
//return $this->actionContent($data);
break;
case 'string' :
$data['field'] = 'Short Text';
//return $this->actionField($data);
break;
case 'media' :
$data['field'] = 'Media';
//return $this->actionFieldDetail($data);
break;
}
if($data['id'] == "add"){
$value = new IQContentModelField();
$value->id = "add";
$value->active = true;
}else {
$value = IQContentModelField::findOrFail($data['id']);
}
return view("iq.modal.model-field-detail", compact('data','value', 'model') )->render();
}
/*
* Area
*/
private function actionArea($data)
{
if($data['id'] == "add"){
$value = new IQContentArea();
$value->id = "add";
$value->active = true;
$data['title'] = "Add Area";
}else {
$value = IQContentArea::findOrFail($data['id']);
$data['title'] = "Edit Area: ".$value->name;
}
$url = route('iq_content_area_detail', [$value->id]);
return view("iq.modal.content", compact('data','value', 'url') )->render();
}
private function actionAreaSection($data)
{
$model = IQContentArea::findOrFail($data['request']['area_id']);
if($data['id'] == "add"){
$value = new IQContentAreaSection();
$value->id = "add";
$value->active = true;
$data['title'] = "Add Section";
}else {
$value = IQContentAreaSection::findOrFail($data['id']);
$data['title'] = "Edit Section: ".$value->name;
}
$url = route('iq_content_area_detail', [$value->id]);
return view("iq.modal.area-section", compact('data','value', 'url', 'model') )->render();
}
/*
* site
*/
private function actionSiteContent($data)
{
if($data['id'] == "add"){
$value = new IQContentSite();
$value->id = "add";
$value->active = true;
$data['title'] = "Add Site";
}else {
$value = IQContentSite::findOrFail($data['id']);
$data['title'] = "Edit Site: ".$value->name;
}
$url = route('iq_content_site_detail', [$value->id]);
return view("iq.modal.site", compact('data','value', 'url') )->render();
}
/*
* tree
*/
private function actionTreeContent($data)
{
if($data['id'] == "add"){
$value = new IQContentTree();
$value->id = "add";
$value->active = true;
$data['title'] = "Add Tree";
}else {
$value = IQContentTree::findOrFail($data['id']);
$data['title'] = "Edit Tree: ".$value->name;
}
$url = route('iq_content_tree_detail', [$value->id]);
return view("iq.modal.content", compact('data','value', 'url') )->render();
}
private function actionTreeNode($data)
{
$model = IQContentTree::findOrFail($data['request']['tree_id']);
if($data['id'] == "add"){
$value = new IQContentTreeNode();
$value->id = "add";
$value->active = true;
$data['title'] = "Add Node";
}else {
$value = IQContentTreeNode::findOrFail($data['id']);
$data['title'] = "Edit Node: ".$value->name;
}
$url = route('iq_content_tree_detail', [$model->id]);
return view("iq.modal.tree-node", compact('data','value', 'url', 'model') )->render();
}
private function actionTreeSiteContent($data)
{
if($data['id'] == "add"){
$value = new Collection();
$value->active = true;
$value->id = 'add';
$data['title'] = "Seite hinzufügen";
}else {
$value = new Collection();
$data['title'] = "Edit Site: ".$value->name;
}
$url = route('iq_content_tree_detail', [$data['request']['tree_id'], $data['request']['tree_node_id']]);
$data['request'] = false;
return view("iq.modal.site", compact('data','value', 'url') )->render();
}
}

View file

@ -0,0 +1,257 @@
<?php
namespace App\Http\Controllers\IQ;
use App\Http\Controllers\Controller;
use App\Models\IQContentTree;
use App\Models\IQContentTreeNode;
use App\Models\TravelGuide;
use App\Models\TravelPageGuide;
use App\Repositories\IQ\ContentSiteRepository;
use Illuminate\Http\Request;
use Input;
use Validator;
class ContentTreeController extends Controller
{
protected $contentSiteRepo;
/**
* ContentSiteController constructor.
*/
public function __construct(ContentSiteRepository $contentSiteRepo)
{
$this->middleware('admin');
$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, $area_section_id = false)
{
$model = IQContentTree::findOrFail($id);
$tree_node = IQContentTreeNode::find($node_id);
$area_section = false;
$site_fields = false;
if($area_section_id){
/*
* $area_section = IQContentAreaSection::findOrFail($area_section_id);
$site_fields = $this->contentSiteRepo->siteFieldPrepare($tree_node->iq_content_site, $area_section);
*/
}
$data = [
'model' => $model,
'area_section' => $area_section,
'site_fields' => $site_fields,
'tree_node' => $tree_node,
'id' => $id,
];
return view('cms.travel_guide.tree-detail', $data);
}
public function repair($id=1){
$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,
];
$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);
$TravelGuide->tree_node_id = $tree_node->id;
$TravelGuide->save();
if($guide_page->travel_guide_content_id > 0){
$TravelGuide = TravelGuide::find($guide_page->travel_guide_content_id);
if($TravelGuide){
$TravelGuide->tree_node_id = $tree_node->id;
$TravelGuide->save();
}
}
}
die("--");
}
public function store($id, $node_id = false, $area_section_id = false)
{
$data = Input::all();
//new sort
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(Input::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' :
/* if($data['id'] == 0){
$contentSite = IQContentSite::create($data);
}else{
$contentSite = IQContentSite::find($data['id']);
$contentSite->fill($data);
$contentSite->save();
}*/
$model = IQContentTree::findOrFail($id);
$model->updated_at = now();
$model->save();
$tree_node = IQContentTreeNode::findOrFail($node_id);
// $tree_node->site_id = $contentSite->id;
$tree_node->save();
$travel_guide = TravelGuide::findOrFail($data['travel_guide_id']);
$travel_guide->tree_node_id = $tree_node->id;
$travel_guide->save();
\Session()->flash('alert-save', '1');
return redirect(route('iq_content_tree_detail', [$id, $node_id]));
break;
}
}
}
public function remove($id, $node_id, $travel_guide_id){
$model = IQContentTree::findOrFail($id);
$tree_node = IQContentTreeNode::findOrFail($node_id);
$tavel_guide = TravelGuide::findOrFail($travel_guide_id);
$tavel_guide->tree_node_id = null;
$tavel_guide->save();
\Session()->flash('alert-success', __('Seite aus Tree entfernt.'));
return redirect(route('iq_content_tree_detail', [$id, $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);
}
}
}
}