Travel Guide Frontend Backend

This commit is contained in:
Kevin Adametz 2020-08-07 16:00:55 +02:00
parent e6cc042aee
commit 0857a34766
681 changed files with 6680 additions and 1689 deletions

View file

@ -56,6 +56,7 @@ class CMSContentController extends Controller
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] = [
@ -63,6 +64,7 @@ class CMSContentController extends Controller
'url' => $url,
];
$ret['nodes'][$lvl] = $tree_node->toArray();
$ret['nodes_active'] = $tree_node->toArray();
}else{
return response()->json(['error' => 'no-node'], $this->successStatus);
}
@ -73,30 +75,54 @@ class CMSContentController extends Controller
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){
$key = ($iq_content_site->travel_guide->scope -1) *-1;
$ret['sites'][$key] = $iq_content_site->travel_guide->toArray();
/*if(!$travel_guide){
//$travel_guide = $iq_content_site->travel_guide;
}*/
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;
}
}
}
}
if(isset($ret['sites'])){
ksort($ret['sites']);
$ret['sites'] = array_values($ret['sites']);
}
//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' => $travel_guide ? $travel_guide->box_image_url : '',
'description' => $travel_guide ? $travel_guide->meta_description : '',
'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,
];
}

View file

@ -0,0 +1,138 @@
<?php
namespace App\Http\Controllers\CMS;
use App\Http\Controllers\Controller;
use App\Models\AnswerQuestion;
use App\Models\IQContentCategory;
use IqContent\LaravelFilemanager\Lfm;
use Request;
use Validator;
class CMSAnswerQuestionController extends Controller
{
/*
* Create a new controller instance.
*
* @return void
*/
protected $identifier_options;
public function __construct()
{
$this->identifier_options = IQContentCategory::where('identifier', 'faq')
->where('active', true)
->orderBy('pos', 'ASC')
->get()->pluck('name','id');
}
public function index()
{
$data = [
'models' => AnswerQuestion::all(),
'identifier_options' => $this->identifier_options,
];
return view('cms.answer_question.index', $data);
}
public function detail($id)
{
if($id === "new") {
$model = new AnswerQuestion();
$id = 'new';
$model->status = 1;
}else{
$model = AnswerQuestion::findOrFail($id);
$id = $model->id;
}
$data = [
'model' => $model,
'id' => $id,
'identifier_options' => $this->identifier_options,
'lfm_helper' => app(Lfm::class),
];
return view('cms.answer_question.detail', $data);
}
public function store($id)
{
$data = Request::all();
$rules = array(
'question' => 'required',
);
$validator = Validator::make(Request::all(), $rules);
if ($validator->fails()) {
return back()->withErrors($validator);
}
if($id === "new") {
$model = AnswerQuestion::create($data);
}else{
$model = AnswerQuestion::findOrFail($data['id']);
$model->fill($data);
$model->save();
}
\Session()->flash('alert-save', '1');
return redirect(route('cms_answer_question_detail', [$model->id]));
}
public function delete($id){
$model = AnswerQuestion::findOrFail($id);
//TODO
//check for use?
// die("check for use");
$model->delete();
\Session()->flash('alert-success', __('Eintrag gelöscht'));
return redirect(route('cms_answer_question'));
}
public function datatable(){
$query = AnswerQuestion::with('iq_content_category')->select('answer_questions.*');
if(Request::get('filter_identifier_options') != ""){
$query->where('i_q_content_category_id', '=', Request::get('filter_identifier_options'));
}
return \DataTables::eloquent($query)
->addColumn('action_edit', function (AnswerQuestion $faq) {
return '<a href="'.route('cms_answer_question_detail', [$faq->id]).'" class="btn icon-btn btn-sm btn-primary"><span class="fa fa-edit"></span></a>';
})
->addColumn('category', function (AnswerQuestion $faq) {
return $faq->iq_content_category ? $faq->iq_content_category->name : '';
})
->addColumn('created_at', function (AnswerQuestion $faq) {
return $faq->created_at->format('d.m.Y');
})
->addColumn('active', function (AnswerQuestion $faq) {
return get_active_badge($faq->active);
})
->addColumn('delete', function (AnswerQuestion $faq) {
return '<a class="text-danger" href="'.route('cms_answer_question_delete', [$faq->id]).'" onclick="return confirm(\'Wirklich löschen?\');"><i class="fa fa-trash-alt"></i></a>';
})
->orderColumn('action_edit', 'id $1')
->orderColumn('category', 'i_q_content_category_id $1')
->orderColumn('created_at', 'created_at $1')
->orderColumn('active', 'active $1')
->rawColumns(['action_edit', 'active', 'delete'])
->make(true);
}
}

View file

@ -20,11 +20,7 @@ class CMSFeedbackController extends Controller
{
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$data = [
@ -36,7 +32,7 @@ class CMSFeedbackController extends Controller
public function detail($id)
{
if($id == "new") {
if($id === "new") {
$feedback = new Feedback();
$id = 'new';
$feedback->status = 1;
@ -57,7 +53,7 @@ class CMSFeedbackController extends Controller
public function store($id)
{
$data = Request::all();
if($id == "new") {
if($id === "new") {
if(!isset($data['feedback_parent']) && !$data['feedback_parent']) {
abort(404);

View file

@ -91,10 +91,18 @@ class ContentModalController extends Controller
case 'tree-site-content' :
return $this->actionTreeSiteContent($data);
break;
case 'add-answer-question' :
return $this->actionAddAnswerQuestion($data);
break;
case 'guide-tree-site' :
return $this->actionGuideTreeSite($data);
break;
case 'site-travel-identifier' :
return $this->actionSiteTravelIdentifier($data);
break;
}
@ -172,7 +180,7 @@ class ContentModalController extends Controller
*/
private function actionArea($data)
{
if($data['id'] == "add"){
if($data['id'] === "add"){
$value = new IQContentArea();
$value->id = "add";
$value->active = true;
@ -189,7 +197,7 @@ class ContentModalController extends Controller
private function actionAreaSection($data)
{
$model = IQContentArea::findOrFail($data['request']['area_id']);
if($data['id'] == "add"){
if($data['id'] === "add"){
$value = new IQContentAreaSection();
$value->id = "add";
$value->active = true;
@ -209,7 +217,7 @@ class ContentModalController extends Controller
*/
private function actionSiteContent($data)
{
if($data['id'] == "add"){
if($data['id'] === "add"){
$value = new IQContentSite();
$value->id = "add";
$value->active = true;
@ -228,7 +236,7 @@ class ContentModalController extends Controller
*/
private function actionTreeContent($data)
{
if($data['id'] == "add"){
if($data['id'] === "add"){
$value = new IQContentTree();
$value->id = "add";
$value->active = true;
@ -245,7 +253,7 @@ class ContentModalController extends Controller
{
$model = IQContentTree::findOrFail($data['request']['tree_id']);
if($data['id'] == "add"){
if($data['id'] === "add"){
$value = new IQContentTreeNode();
$value->id = "add";
$value->active = true;
@ -261,15 +269,15 @@ class ContentModalController extends Controller
private function actionTreeSiteContent($data)
{
if($data['id'] == "add"){
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;
/* $value = new Collection();
$data['title'] = "Edit Site: ".$value->name;*/
}
$url = route('iq_content_tree_detail', [$data['request']['tree_id'], $data['request']['tree_node_id']]);
@ -278,6 +286,25 @@ class ContentModalController extends Controller
return view("iq.modal.site", compact('data','value', 'url') )->render();
}
private function actionAddAnswerQuestion($data)
{
if($data['id'] === "add"){
$value = new Collection();
$value->active = true;
$value->id = 'add';
$data['title'] = "Frage & Antwort hinzufügen";
}else {
/* $value = new Collection();
$data['title'] = "Edit Eintrag: ".$value->name; */
}
$url = route('iq_content_tree_detail', [$data['request']['tree_id'], $data['request']['tree_node_id']]);
$data['request'] = false;
return view("iq.modal.faq", compact('data','value', 'url') )->render();
}
private function actionGuideTreeSite($data)
{
if(!isset($data['tree_id'])){
@ -287,8 +314,6 @@ class ContentModalController extends Controller
$data['travel_guide_id'] = $data['request']['travel_guide_id'];
$data['title'] = "Tree zuordnen";
$url = route('cms_travel_guide_detail', [$data['request']['travel_guide_id']]);
}else {
$value = new Collection();
$value->active = true;
@ -300,16 +325,35 @@ class ContentModalController extends Controller
}
$url = route('iq_content_tree_detail', [$data['tree_id']]);
}
$data['request'] = false;
return view("iq.modal.tree_site", compact('data','value', 'url') )->render();
}
private function actionSiteTravelIdentifier($data)
{
$value = IQContentSite::find($data['id']);
$node = $value->iq_content_tree_node;
$select_data = \App\Models\IQContentSite::$travelTypes;
foreach ($node->iq_content_sites as $site){
if($site->identifier !== null && $site->identifier !== ''){
if(isset($select_data[$site->identifier])) {
unset($select_data[$site->identifier]);
}
}
}
$data['title'] = " Zuordnung Seite";
$url = route('iq_content_tree_detail', [$data['request']['tree_id'], $data['request']['tree_node_id']]);
$data['request'] = false;
return view("iq.modal.travel-identifier", compact('data','value', 'url', 'select_data') )->render();
}
}

View file

@ -4,6 +4,8 @@ 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;
@ -11,6 +13,7 @@ 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;
@ -45,7 +48,6 @@ class ContentTreeController extends Controller
$tree_node = IQContentTreeNode::find($node_id);
$area_section = false;
$site_fields = false;
if($section_id){
/*
* $area_section = IQContentAreaSection::findOrFail($area_section_id);
@ -58,6 +60,7 @@ class ContentTreeController extends Controller
'tree_node' => $tree_node,
'id' => $id,
'section' => false,
'lfm_helper' => app(Lfm::class),
];
return view('cms.travel_guide.tree-detail', $data);
@ -213,6 +216,7 @@ class ContentTreeController extends Controller
\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();
@ -228,15 +232,8 @@ class ContentTreeController extends Controller
\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();
}*/
case 'tree-site-content' :
$model = IQContentTree::findOrFail($id);
$model->updated_at = now();
$model->save();
@ -253,9 +250,24 @@ class ContentTreeController extends Controller
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();
@ -271,7 +283,20 @@ class ContentTreeController extends Controller
}
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;
}
}
}
@ -313,18 +338,29 @@ class ContentTreeController extends Controller
}
}
public function removeSite($id, $node_id, $travel_guide_id, $r=false){
$model = IQContentTree::findOrFail($id);
public function remove($action, $id, $node_id, $remove_id, $r='tree'){
$tree = IQContentTree::findOrFail($id);
$tree_node = IQContentTreeNode::findOrFail($node_id);
$tavel_guide = TravelGuide::findOrFail($travel_guide_id);
$iq_content_site = IQContentSite::whereTreeNodeId($node_id)->whereTravelGuideId($travel_guide_id)->first();
$iq_content_site->delete();
\Session()->flash('alert-success', __('Seite aus Tree entfernt.'));
if($r == "g"){
return redirect(route('cms_travel_guide_detail', [$travel_guide_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.'));
}
return redirect(route('iq_content_tree_detail', [$id, $node_id]));
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]));
}

View file

@ -3,6 +3,7 @@
namespace App\Http\Controllers;
use App\Models\GeneralFile;
use App\Models\IQContentSite;
use App\Models\ServiceProviderService;
use App\Models\TravelCompanyService;
use App\Models\TravelCountry;
@ -69,8 +70,6 @@ class ModalController extends Controller
}
$ret = view("admin.modal.provider-service", compact('data', 'value'))->render();
}
}
return response()->json(['response' => $data, 'html'=>$ret, 'status'=>$status]);
}

View file

@ -0,0 +1,57 @@
<?php
namespace App\Http\Controllers\Settings;
use App\Http\Controllers\Controller;
use App\Models\IQContentCategory;
use App\Services\Util;
use Request;
class CategoryController extends Controller
{
public function __construct()
{
$this->middleware('admin');
}
public function index($step = false)
{
$data = [
'airline' => IQContentCategory::all(),
];
return view('settings.category.index', $data);
}
public function update(){
$data = Request::all();
$data['active'] = isset($data['active']) ? true : false;
if($data['id'] === "new"){
$model = IQContentCategory::create($data);
}else{
$model = IQContentCategory::find($data['id']);
$model->fill($data);
$model->save();
}
\Session()->flash('alert-save', '1');
return redirect(route('admin_settings_categories'));
}
public function delete($id){
//TODO check ist linked
$model = IQContentCategory::findOrFail($id);
$model->delete();
\Session()->flash('alert-success', 'Eintrag gelöscht');
return redirect()->back();
}
}

View file

@ -8,6 +8,10 @@ use App\Models\IQContentSiteField;
use App\Models\IQContentTree;
use App\Models\IQContentTreeNode;
use App\Models\TravelGuide;
use Illuminate\Support\Str;
use IqContent\LaravelFilemanager\Controllers\FileController;
use IqContent\LaravelFilemanager\Controllers\FolderController;
use IqContent\LaravelFilemanager\Models\IQContentFile;
use Request;
use Validator;
@ -23,11 +27,15 @@ class ContentLinkController extends Controller
// $this->middleware('auth');
}
public function filterHTML(){
}
//content_links
public function index()
{
$val = [];
$text = "";
$travelGuides = TravelGuide::all();
/* $travelGuides = TravelGuide::all();
foreach ($travelGuides as $travelGuide){
if(strpos($travelGuide->full_text, "<h1><br></h1>") !== false){
$val[$travelGuide->id] = "<h1><br></h1>";
@ -43,47 +51,27 @@ class ContentLinkController extends Controller
$travelGuide = TravelGuide::find(203);
$text = $travelGuide->full_text;
// $new_text = preg_replace('/<h1[^>]*>([\s\S]*?)<\/h1[^>]*>/', '', $TravelGuide->full_text);
// $new_text = preg_replace('/<h1[^>]*>([\s\S]*?)<\/h1[^>]*>/', '', $TravelGuide->full_text);
*/
$data = [
'text' => $text,
'values' => $val,
];
return view('sys.tools.links', $data);
}
public function store()
{
$travelGuides = TravelGuide::all();
foreach ($travelGuides as $travelGuide){
if(strpos($travelGuide->full_text, "<h1><br></h1>") !== false) {
$travelGuide->full_text = str_replace("<h1><br></h1>", "", $travelGuide->full_text);
$travelGuide->save();
}
}
foreach ($travelGuides as $travelGuide){
if(strpos($travelGuide->full_text, "<h1") !== false){
$travelGuide->full_text = str_replace("<h1", "<h2", $travelGuide->full_text);
$travelGuide->full_text = str_replace("h1>", "h2>", $travelGuide->full_text);
$travelGuide->save();
}
}
return redirect()->back();
//$this->readNodeAndSaveToTree();
//$this->cleanTextTravelGuide();
//$this->h1ToTitleTravelGuide();
}
public function treeTitle()
//tree
public function tree()
{
$text = "";
$val = [];
@ -93,14 +81,10 @@ class ContentLinkController extends Controller
$text .= $tree_node->id." -- ".$tree_node->title."\n";
foreach ($tree_node->iq_content_sites as $site){
if(isset($site->travel_guide->meta_title)){
if(isset($val[$tree_node->id])){
if(strlen($site->travel_guide->meta_title) > strlen($val[$tree_node->id])){
$val[$tree_node->id] = $site->travel_guide->meta_title;
}
}else{
$val[$tree_node->id] = $site->travel_guide->meta_title;
}
if($site->travel_guide && $site->identifier === null){
$identifier = $site->travel_guide->scope === 1 ? 'long' : 'short';
//$site->identifier = $site->travel_guide->scope === 1 ? 'long' : 'short';
$text .= "-- ".$site->id." -- ".$identifier."\n";
}
}
}
@ -112,34 +96,322 @@ class ContentLinkController extends Controller
return view('sys.tools.trees', $data);
}
public function treeTitleStore()
public function treeStore()
{
$trees = IQContentTree::all();
$val = [];
foreach ($trees as $tree){
foreach ($tree->iq_content_tree_nodes as $tree_node){
foreach ($tree_node->iq_content_sites as $site){
if(isset($site->travel_guide->meta_title)){
if(isset($val[$tree_node->id])){
if(strlen($site->travel_guide->meta_title) > strlen($val[$tree_node->id])){
$val[$tree_node->id] = $site->travel_guide->meta_title;
}
}else{
$val[$tree_node->id] = $site->travel_guide->meta_title;
}
if($site->travel_guide){
$site->identifier = $site->travel_guide->scope === 1 ? 'long' : 'short';
$site->save();
}
}
if(isset($val[$tree_node->id])){
$tree_node->title = $val[$tree_node->id];
$tree_node->save();
}
}
}
return redirect()->back();
}
//clean_tree_code
public function cleanTreeCode(){
$val = [];
$text = "";
$travelGuide = TravelGuide::find(166);
$text = $travelGuide->full_text;
$data = [
'new_text' => \App\Services\Util::cleanHTML($text),
'full_text' => $travelGuide->full_text,
'values' => $val,
];
return view('sys.tools.clean', $data);
}
public function cleanTreeCodeStore(){
$this->cleanTextTravelGuide();
return redirect()->back();
}
public function cleanTextTravelGuide()
{
$TravelGuides = TravelGuide::all();
foreach ($TravelGuides as $travelGuide){
$new_text = \App\Services\Util::cleanHTML($travelGuide->full_text);
if(strcmp($travelGuide->full_text, $new_text) != 0){
$travelGuide->full_text = $new_text;
$travelGuide->save();
var_dump($travelGuide->id);
echo "<br>";
}
}
die("done");
}
//media_insert
public function mediaInsert(){
$val = [];
$text = "";
$data = [
'text' => $text,
'values' => $val,
];
return view('sys.tools.insert', $data);
}
public function mediaInsertStore(){
$val = [];
$data = Request::all();
$text = $data['text'];
if($data['action'] === 'insert'){
$lines = explode(PHP_EOL, $text);
$FolderC = new FolderController();
$FileC = new FileController();
foreach ($lines as $line){
$sep = explode(';', $line);
if(isset($sep[0]) && isset($sep[1]) && isset($sep[2])){
//youtube //main dir
$working_dir = "/shares/youtube/".$sep[0];
$folder_name = $sep[1];
$folder = $FolderC->makeFolder($working_dir, $folder_name);
$working_dir = $working_dir."/".$folder_name;
$file = $FileC->makeYoutube($working_dir, $sep[2]);
$val[] = $file.' - '.$sep[2]." | ".$working_dir;
}
}
}
if($data['action'] === 'youtube_ids'){
$TravelGuides = TravelGuide::all();
foreach ($TravelGuides as $travelGuide){
$this->findYoutubeLinks($val, $travelGuide);
/* <iframe allowfullscreen="" frameborder="0" height="500" src="https://www.youtube-nocookie.com/embed/9zs9RKOFCIs?rel=0" width="100%"></iframe> */
}
}
if($data['action'] === 'replace_youtube_links') {
$TravelGuides = TravelGuide::all();
foreach ($TravelGuides as $travelGuide){
$this->replaceYoutubeLinks($val, $travelGuide);
/* <iframe allowfullscreen="" frameborder="0" height="500" src="https://www.youtube-nocookie.com/embed/9zs9RKOFCIs?rel=0" width="100%"></iframe> */
}
}
if($data['action'] === 'replace_youtube_div') {
$this->replaceYoutubeDiv($val, TravelGuide::find(335));
$TravelGuides = TravelGuide::all();
foreach ($TravelGuides as $travelGuide){
$this->replaceYoutubeDiv($val, $travelGuide);
/* <iframe allowfullscreen="" frameborder="0" height="500" src="https://www.youtube-nocookie.com/embed/9zs9RKOFCIs?rel=0" width="100%"></iframe> */
}
}
$data = [
'text' => $text,
'values' => $val,
];
return view('sys.tools.insert', $data);
}
private function replaceYoutubeDiv(&$val, $travelGuide)
{
$ret = [];
$dom = new \DOMDocument('1.0', 'utf-8');
@$dom->loadHTML(mb_convert_encoding($travelGuide->full_text, 'HTML-ENTITIES', 'UTF-8'));
$links = $dom->getElementsByTagName('iframe');
foreach ($links as $link) {
if($link->parentNode->parentNode->nodeName === 'div'){
if($link->parentNode->parentNode->getAttribute('itemprop') === 'video'){
if($link->parentNode->parentNode->getAttribute('class') === 'mediaA'){
if($link->parentNode->parentNode->parentNode->getAttribute('itemprop') === 'video'){
$need = $link->parentNode->parentNode;
$replace = $link->parentNode->parentNode->parentNode;
$replace->parentNode->insertBefore($dom->importNode($need, true), $replace->nextSibling);
$replace->parentNode->removeChild($replace);
$html = $dom->saveHTML();
$travelGuide->full_text = $html;
$travelGuide->save();
$val[] = 'replace - '.$travelGuide->id;
}else{
// dump("notfound itemprop over class mediaA".$travelGuide->id);
$val[] = 'notfound - itemprop over class mediaA - '.$travelGuide->id;
//in
foreach ($link->parentNode->parentNode->childNodes as $node){
if($node->nodeName === 'h2'){
if($node->firstChild->nodeName === '#text'){
$span = $dom->createElement('span', htmlspecialchars($node->nodeValue));
$span->setAttribute('itemprop', 'name');
$h2 = $dom->createElement('h2');
$h2->appendChild($span);
$node->parentNode->replaceChild($h2, $node);
$html = $dom->saveHTML();
$travelGuide->full_text = $html;
$travelGuide->save();
$val[] = 'replace h2 - '.$travelGuide->id;
}
}
}
//<span itemprop="name">
}
//dump("found M div ".$travelGuide->id);
}else{
// dump("notfound class mediaA".$travelGuide->id);
$val[] = 'notfound - class mediaA - '.$travelGuide->id;
}
}else{
// dump("notfound div ".$travelGuide->id);
$val[] = 'notfound - video - '.$travelGuide->id;
}
// dump($travelGuide->id);
}else{
//dump("notfound".$travelGuide->id);
$val[] = 'notfound - div - '.$travelGuide->id;
}
}
return $ret;
}
private function replaceYoutubeLinks(&$val, $travelGuide)
{
$ret = [];
$dom = new \DOMDocument('1.0', 'utf-8');
@$dom->loadHTML(mb_convert_encoding($travelGuide->full_text, 'HTML-ENTITIES', 'UTF-8'));
$links = $dom->getElementsByTagName('iframe');
foreach ($links as $link) {
$src = $link->getAttribute('src');
//
$replace = false;
$reLink = false;
if($link->parentNode->nodeName === 'div'){
if($link->parentNode->getAttribute('class') === 'video-container'){
if($link->parentNode->parentNode->getAttribute('class') === 'mediaA' && $link->parentNode->parentNode->getAttribute('itemprop') !== 'video'){
$replace = $link->parentNode->parentNode;
$reLink = $link->parentNode;
}else{
$val[] = 'found - manual - '.$travelGuide->id;
}
}else{
$val[] = 'first div - manual - '.$travelGuide->id;
}
}elseif ($link->parentNode->nodeName === 'p'){
if($link->parentNode->parentNode->nodeName === 'div'){
if($link->parentNode->parentNode->getAttribute('itemprop') === 'video'){
//replace div
$replace = $link->parentNode->parentNode;
$reLink = $link->parentNode;
}else{
//replace p
$replace = $link->parentNode;
$reLink = $link;
}
}else{
$replace = $link->parentNode;
$reLink = $link;
}
}else{
$val[] = 'else div - manual - '.$travelGuide->id;
}
if($replace){
$id = preg_replace('/http.*?embed\//i', '', $src);
$videoID = preg_replace('#[&\?].+$#', '', $id);
$identifier = Str::slug(pre_slug($videoID), '-');
$IQContentFile = IQContentFile::whereIdentifier($identifier)->first();
if($IQContentFile) {
$video = new \DOMDocument('1.0', 'utf-8');
$makeText = '<?xml encoding="utf-8" ?><div class="mediaA" itemprop="video" itemscope itemtype="http://schema.org/VideoObject">';
$makeText .= '<h2><span itemprop="name">' . $IQContentFile->content['title'] . '</span></h2>';
$makeText .= '<meta itemprop="duration" content="' . $IQContentFile->content['duration'] . '" />';
$makeText .= '<meta itemprop="uploadDate" content="' . $IQContentFile->content['uploadDate'] . '"/>';
$makeText .= '<meta itemprop="thumbnailURL" content="' . $IQContentFile->content['thumbnailURL'] . '" />';
$makeText .= '<meta itemprop="embedURL" content="https://youtube.googleapis.com/v/' . $IQContentFile->content['id'] . '" />';
$makeText .= '<div class="video-container"><iframe src="https://www.youtube.com/embed/' . $IQContentFile->content['id'] . '?rel=0&amp;controls=0&amp;showinfo=0" data-identifier="' . $IQContentFile->identifier . '" data-slug="' . $IQContentFile->slug . '" frameborder="0" allowfullscreen></iframe></div>';
$makeText .= '<div class="mediaInfo"><p class="infotext" itemprop="description">'.$IQContentFile->content['description'].'</p></div></div>';
$makeText = str_replace('&', '&amp;', $makeText);
$video->loadHTML($makeText);
$replace->insertBefore($dom->importNode($video->documentElement, true), $reLink->nextSibling);
$replace->removeChild($reLink);
$html = $dom->saveHTML();
$travelGuide->full_text = $html;
$travelGuide->save();
$val[] = 'replace - '.$travelGuide->id;
}
}
}
return $ret;
}
private function findYoutubeLinks(&$val, $travelGuide)
{
$ret = [];
$dom = new \DOMDocument('1.0', 'utf-8');
@$dom->loadHTML(mb_convert_encoding($travelGuide->full_text, 'HTML-ENTITIES', 'UTF-8'));
$links = $dom->getElementsByTagName('iframe');
foreach ($links as $link) {
$src = $link->getAttribute('src');
$id = preg_replace('/http.*?embed\//i', '', $src);
$videoID = preg_replace('#[&\?].+$#', '', $id);
$identifier = Str::slug(pre_slug($videoID), '-');
$count = IQContentFile::whereIdentifier($identifier)->count();
if($count === 0){
$ret[$videoID] = $count;
$val[] = "weitere;Travel-Guide;".$videoID.";";
}
}
return $ret;
}
//private?
public function h1ToTitleTravelGuide()
{
$TravelGuides = TravelGuide::all();
@ -171,23 +443,6 @@ class ContentLinkController extends Controller
die("done");
}
public function cleanTextTravelGuide()
{
$TravelGuides = TravelGuide::all();
foreach ($TravelGuides as $travelGuide){
$new_text = \App\Services\Util::cleanHTML($travelGuide->full_text);
if(strcmp($travelGuide->full_text, $new_text) != 0){
$travelGuide->full_text = $new_text;
$travelGuide->save();
var_dump($travelGuide->id);
echo "<br>";
}
}
die("done");
}
public function readNodeAndSaveToTree(){
$input = Request::all();
$ret = [];
@ -246,7 +501,6 @@ class ContentLinkController extends Controller
}
public function ul_to_array($ol){
if(is_string($ol)){
if(!$ol = simplexml_load_string($ol)) {
@ -300,9 +554,6 @@ class ContentLinkController extends Controller
}
}
/**
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function rindex()
{
$data = [
@ -312,8 +563,6 @@ class ContentLinkController extends Controller
return view('iq.content.tools.redirects', $data);
}
public function rstore()
{
@ -328,9 +577,6 @@ class ContentLinkController extends Controller
$dom = new \DOMDocument('1.0', 'utf-8');
@$dom->loadHTML(mb_convert_encoding($input['text'], 'HTML-ENTITIES', 'UTF-8'));
$tags = ['ol'];
foreach ($tags as $tag){
$domElements = [];
@ -384,8 +630,6 @@ class ContentLinkController extends Controller
}
public function makeTree(IQContentTree $iq_content_tree, $lvl = 0, $parent_id = false, $url = "")
{
@ -412,4 +656,63 @@ class ContentLinkController extends Controller
//tree_title
/* public function tree()
{
$text = "";
$val = [];
$trees = IQContentTree::all();
foreach ($trees as $tree){
foreach ($tree->iq_content_tree_nodes as $tree_node){
$text .= $tree_node->id." -- ".$tree_node->title."\n";
foreach ($tree_node->iq_content_sites as $site){
if(isset($site->travel_guide->meta_title)){
if(isset($val[$tree_node->id])){
if(strlen($site->travel_guide->meta_title) > strlen($val[$tree_node->id])){
$val[$tree_node->id] = $site->travel_guide->meta_title;
}
}else{
$val[$tree_node->id] = $site->travel_guide->meta_title;
}
}
}
}
}
$data = [
'text' => $text,
'values' => $val,
];
return view('sys.tools.trees', $data);
}
public function treeStore()
{
$trees = IQContentTree::all();
$val = [];
foreach ($trees as $tree){
foreach ($tree->iq_content_tree_nodes as $tree_node){
foreach ($tree_node->iq_content_sites as $site){
if(isset($site->travel_guide->meta_title)){
if(isset($val[$tree_node->id])){
if(strlen($site->travel_guide->meta_title) > strlen($val[$tree_node->id])){
$val[$tree_node->id] = $site->travel_guide->meta_title;
}
}else{
$val[$tree_node->id] = $site->travel_guide->meta_title;
}
}
}
if(isset($val[$tree_node->id])){
$tree_node->title = $val[$tree_node->id];
$tree_node->save();
}
}
}
return redirect()->back();
}*/
}

View file

@ -0,0 +1,96 @@
<?php
/**
* Created by Reliese Model.
*/
namespace App\Models;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
/**
* Class AnswerQuestion
*
* @property int $id
* @property string $question
* @property string $question_text
* @property string $answer
* @property string $answer_text
* @property bool $active
* @property Carbon $created_at
* @property Carbon $updated_at
* @package App\Models
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\AnswerQuestion newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\AnswerQuestion newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\AnswerQuestion query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\AnswerQuestion whereActive($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\AnswerQuestion whereAnswer($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\AnswerQuestion whereAnswerText($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\AnswerQuestion whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\AnswerQuestion whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\AnswerQuestion whereQuestion($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\AnswerQuestion whereQuestionText($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\AnswerQuestion whereUpdatedAt($value)
* @mixin \Eloquent
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\IQContentFaq[] $iq_content_faq
* @property-read int|null $iq_content_faq_count
* @property int|null $i_q_content_category_id
* @property-read \App\Models\IQContentCategory|null $iq_content_category
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\AnswerQuestion whereIQContentCategoryId($value)
*/
class AnswerQuestion extends Model
{
protected $connection = 'mysql_stern';
protected $table = 'answer_questions';
protected $casts = [
'active' => 'bool'
];
protected $fillable = [
'i_q_content_category_id',
'question',
'question_text',
'answer',
'answer_text',
'active'
];
public function iq_content_category()
{
return $this->belongsTo(IQContentCategory::class, 'i_q_content_category_id');
}
public function iq_content_faq()
{
return $this->hasMany(IQContentFaq::class, 'faq_id', 'id');
}
public static function getSiteOptions($id, $identifier, $html = true, $choose = true) {
$values = [];
$ret = "";
$models = AnswerQuestion::with('iq_content_category')->select('answer_questions.*')->where('answer_questions.active', 1)//->where('iq_content_category.identifier', $identifier)
->whereHas('iq_content_category', function ($q) use ($identifier) {
$q->where('slug', 'reisefuehrer');
})->get();
if($html) {
if($choose){
$ret .= '<option value="">Bitte wählen</option>\n';
}
foreach ($models as $model) {
$attr = ($model->id == $id) ? ' selected="selected"' : '';
$ret .= '<option value="' . $model->id . '"' . $attr . '>' . $model->question . '</option>\n';
}
return $ret;
}else{
foreach ($models as $model) {
$values[$model->id] = $model->question;
}
return $values;
}
return false;
}
}

View file

@ -167,6 +167,14 @@ use Illuminate\Database\Eloquent\Model;
* @property-read int|null $booking_country_services_count
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\BookingCountryService[] $booking_country_services_checked
* @property-read int|null $booking_country_services_checked_count
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\BookingCompanyService[] $booking_company_services
* @property-read int|null $booking_company_services_count
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\BookingCompanyService[] $booking_company_services_checked
* @property-read int|null $booking_company_services_checked_count
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\BookingProviderService[] $booking_provider_services
* @property-read int|null $booking_provider_services_count
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\BookingProviderService[] $booking_provider_services_checked
* @property-read int|null $booking_provider_services_checked_count
*/
class Booking extends Model
{

View file

@ -25,6 +25,8 @@ use Illuminate\Database\Eloquent\Model;
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\CMSAuthor whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\CMSAuthor whereUpdatedAt($value)
* @mixin \Eloquent
* @property string|null $description
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\CMSAuthor whereDescription($value)
*/
class CMSAuthor extends Model
{
@ -33,6 +35,7 @@ class CMSAuthor extends Model
protected $table = 'c_m_s_authors';
protected $fillable = [
'name'
'name',
'description',
];
}

View file

@ -0,0 +1,77 @@
<?php
/**
* Created by Reliese Model.
*/
namespace App\Models;
use Carbon\Carbon;
use Cviebrock\EloquentSluggable\Sluggable;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model;
/**
* Class IQContentCategory
*
* @property int $id
* @property string $name
* @property string $slug
* @property string $identifier
* @property int $pos
* @property bool $active
* @property Carbon $created_at
* @property Carbon $updated_at
* @property Collection|IQContentTag[] $i_q_content_tags
* @package App\Models
* @property-read int|null $i_q_content_tags_count
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentCategory findSimilarSlugs($attribute, $config, $slug)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentCategory newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentCategory newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentCategory query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentCategory whereActive($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentCategory whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentCategory whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentCategory whereIdentifier($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentCategory whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentCategory wherePos($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentCategory whereSlug($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentCategory whereUpdatedAt($value)
* @mixin \Eloquent
*/
class IQContentCategory extends Model
{
use Sluggable;
protected $connection = 'mysql_stern';
protected $table = 'i_q_content_categories';
protected $casts = [
'pos' => 'int',
'active' => 'bool'
];
protected $fillable = [
'name',
'slug',
'identifier',
'pos',
'active'
];
public function sluggable()
{
return [
'slug' => [
'source' => 'name'
]
];
}
public function i_q_content_tags()
{
return $this->hasMany(IQContentTag::class, 'category_id');
}
}

View file

@ -0,0 +1,53 @@
<?php
/**
* Created by Reliese Model.
*/
namespace App\Models;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
/**
* Class IQContentFaq
*
* @property int $id
* @property int $tree_node_id
* @property int $faq_id
* @property Carbon $created_at
* @property Carbon $updated_at
* @property AnswerQuestion $answer_question
* @property IQContentTreeNode $i_q_content_tree_node
* @package App\Models
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentFaq newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentFaq newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentFaq query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentFaq whereTreeNodeId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentFaq whereFaqId($value)
* @mixin \Eloquent
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentFaq whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentFaq whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentFaq whereUpdatedAt($value)
*/
class IQContentFaq extends Model
{
protected $connection = 'mysql_stern';
protected $table = 'i_q_content_faqs';
protected $fillable = [
'tree_node_id',
'faq_id'
];
public function answer_question()
{
return $this->belongsTo(AnswerQuestion::class, 'faq_id');
}
public function i_q_content_tree_node()
{
return $this->belongsTo(IQContentTreeNode::class, 'tree_node_id');
}
}

View file

@ -0,0 +1,59 @@
<?php
/**
* Created by Reliese Model.
*/
namespace App\Models;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
/**
* Class IQContentFileTag
*
* @property int $id
* @property int $file_id
* @property int $tag_id
* @property Carbon $created_at
* @property Carbon $updated_at
*
* //* @property IQContentFile $i_q_content_file
* @property IQContentTag $i_q_content_tag
* @package App\Models
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentFileTag newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentFileTag newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentFileTag query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentFileTag whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentFileTag whereFileId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentFileTag whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentFileTag whereTagId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentFileTag whereUpdatedAt($value)
* @mixin \Eloquent
*/
class IQContentFileTag extends Model
{
protected $connection = 'mysql_stern';
protected $table = 'i_q_content_file_tags';
protected $casts = [
'file_id' => 'int',
'tag_id' => 'int'
];
protected $fillable = [
'file_id',
'tag_id'
];
/*public function i_q_content_file()
{
return $this->belongsTo(IQContentFile::class, 'file_id');
}*/
public function i_q_content_tag()
{
return $this->belongsTo(IQContentTag::class, 'tag_id');
}
}

View file

@ -23,6 +23,8 @@ use Illuminate\Database\Eloquent\Model;
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentSite whereTreeNodeId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentSite whereUpdatedAt($value)
* @mixin \Eloquent
* @property string|null $identifier
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentSite whereIdentifier($value)
*/
class IQContentSite extends Model
{
@ -31,9 +33,14 @@ class IQContentSite extends Model
protected $table = 'i_q_content_sites';
protected $fillable = [
'tree_node_id', 'travel_guide_id',
'tree_node_id', 'travel_guide_id', 'identifier',
];
public static $travelTypes = [
''=>'keine',
'long'=>'Lange Version',
'short'=>'Kurze Version',
];
public function iq_content_tree_node()
{
return $this->belongsTo('App\Models\IQContentTreeNode', 'tree_node_id');
@ -44,4 +51,7 @@ class IQContentSite extends Model
return $this->belongsTo('App\Models\TravelGuide', 'travel_guide_id');
}
public function getTravelType(){
return isset(self::$travelTypes[$this->attributes['identifier']]) ? self::$travelTypes[$this->attributes['identifier']] : "";
}
}

View file

@ -0,0 +1,69 @@
<?php
/**
* Created by Reliese Model.
*/
namespace App\Models;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model;
/**
* Class IQContentTag
*
* @property int $id
* @property int $category_id
* @property string $name
* @property string $slug
* @property int $pos
* @property bool $active
* @property Carbon $created_at
* @property Carbon $updated_at
* @property IQContentCategory $i_q_content_category
* // * @property Collection|IQContentFileTag[] $i_q_content_file_tags
* @package App\Models
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentTag newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentTag newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentTag query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentTag whereActive($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentTag whereCategoryId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentTag whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentTag whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentTag whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentTag wherePos($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentTag whereSlug($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentTag whereUpdatedAt($value)
* @mixin \Eloquent
*/
class IQContentTag extends Model
{
protected $connection = 'mysql_stern';
protected $table = 'i_q_content_tags';
protected $casts = [
'category_id' => 'int',
'pos' => 'int',
'active' => 'bool'
];
protected $fillable = [
'category_id',
'name',
'slug',
'pos',
'active'
];
public function i_q_content_category()
{
return $this->belongsTo(IQContentCategory::class, 'category_id');
}
/*public function i_q_content_file_tags()
{
return $this->hasMany(IQContentFileTag::class, 'tag_id');
}*/
}

View file

@ -57,6 +57,12 @@ use Illuminate\Support\Str;
* @property-read int|null $iq_content_tree_node_childs_count
* @property string|null $title
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentTreeNode whereTitle($value)
* @property array|null $image
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\IQContentTreeNode whereImage($value)
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\IQContentFaq[] $iq_content_faq
* @property-read int|null $iq_content_faq_count
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\IQContentFaq[] $iq_content_faqs
* @property-read int|null $iq_content_faqs_count
*/
class IQContentTreeNode extends Model
{
@ -70,10 +76,10 @@ class IQContentTreeNode extends Model
protected $table = 'i_q_content_tree_nodes';
protected $fillable = [
'tree_id', 'parent_id', 'lvl', 'name', 'identifier', 'title', 'description', 'settings', 'pos', 'active',
'tree_id', 'parent_id', 'lvl', 'name', 'identifier', 'title', 'description', 'settings', 'image', 'pos', 'active',
];
protected $casts = ['settings' => 'array'];
protected $casts = ['settings' => 'array', 'image' => 'array'];
public function sluggable()
{
@ -104,6 +110,11 @@ class IQContentTreeNode extends Model
return $this->hasMany('App\Models\IQContentSite', 'tree_node_id', 'id');
}
public function iq_content_faqs()
{
return $this->hasMany('App\Models\IQContentFaq', 'tree_node_id', 'id');
}
public function iq_content_site_first()
{
foreach ($this->iq_content_sites as $iq_content_site) {
@ -142,7 +153,12 @@ class IQContentTreeNode extends Model
return $ret.$node_parent->identifier."/";
}
}
public function getImage($key){
if(isset($this->image[$key])){
return $this->image[$key];
}
return "";
}
public static function getTreeNodeOptions($tree_id, $id = false, $html = true, $choose = true) {
$values = [];

View file

@ -127,12 +127,45 @@ class Util
$html = str_replace('property="article"', ' ', $html);
$html = str_replace('&nbsp;', ' ', $html);
$html = str_replace('https://www.aegypten-online.de', 'https://www.sterntours.de', $html);
$html = str_replace('https://www.sterntours.de/uploads', 'https://www.sterntours.de/_uploads', $html);
$html = str_replace('<div class="contentTextPicText"><br></div>', '', $html);
$html = str_replace('<p><br></p>', '', $html);
$html = str_replace('src="/docs/', 'src="https://www.sterntours.de/docs/', $html);
$html = str_replace('<figure class="sun-img-figure">', '<div class="mediaA">', $html);
$html = str_replace('</figure>', '</div>', $html);
$html = str_replace('https://www.youtube.com', 'https://www.youtube-nocookie.com', $html);
// $html = preg_replace("/(</?)div/", "$1p", $html);
$html = str_replace('<p> </p>', '', $html);
$html = str_replace('<p></p>', '', $html);
$html = preg_replace('/(<[^>]+) style=".*?"/i', '$1', $html);
$html = preg_replace('/<p[^>]*>Autor dieses Artikels.*?<\/p[^>]*>/i', '', $html);
$html = str_replace('class="contentImage"', 'class="mediaA"', $html);
$html = str_replace(' class="MsoNormal"', '', $html);
$dom = new \DOMDocument('1.0', 'utf-8');
@$dom->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'));
$removeFullTags = ['span', 'a'];
$removeStyleTags = ['ul', 'li', 'h1', 'h2', 'br'];
foreach ($removeStyleTags as $removeStyleTag){
$elements = $dom->getElementsByTagName($removeStyleTag);
foreach ($elements as $element) {
$element->removeAttribute('style');
}
}
$removeFullTags = ['span', 'a'];
foreach ($removeFullTags as $removeFullTag){
$domElemsToRemove = [];
$elements = $dom->getElementsByTagName($removeFullTag);
@ -149,13 +182,55 @@ class Util
$domElem->parentNode->replaceChild($new_node, $domElem);
}
}
$removeStyleTags = ['ul', 'li', 'h1', 'h2', 'br'];
foreach ($removeStyleTags as $removeStyleTag){
$elements = $dom->getElementsByTagName($removeStyleTag);
foreach ($elements as $element) {
$element->removeAttribute('style');
//replace div to p
$elements = $dom->getElementsByTagName('div');
foreach ($elements as $element) {
$domElemsToRemove[] = $element;
/* if($element->getAttribute('class') === 'contentTextPicText'){
$new_node = $dom->createTextNode("<p>".$element->nodeValue."</p>");
$element->parentNode->replaceChild($new_node, $element);
} */
if ($element->getAttribute('class') === 'imageCaption') {
$new_node = $dom->createTextNode($element->nodeValue . "</p>");
$p = $dom->createElement('p', $element->nodeValue);
$div = $dom->createElement('div');
// $new_node = $dom->createElement('div', $new_node);
$div->setAttribute('class', 'mediaInfo');
$div->appendChild($p);
// dump($element);
// die();
//
$element->parentNode->replaceChild($div, $element);
}
}
$elements = $dom->getElementsByTagName('figcaption');
foreach ($elements as $element) {
$domElemsToRemove[] = $element;
/* if($element->getAttribute('class') === 'contentTextPicText'){
$new_node = $dom->createTextNode("<p>".$element->nodeValue."</p>");
$element->parentNode->replaceChild($new_node, $element);
} */
$new_node = $dom->createTextNode($element->nodeValue . "</p>");
$p = $dom->createElement('p', $element->nodeValue);
$div = $dom->createElement('div');
// $new_node = $dom->createElement('div', $new_node);
$div->setAttribute('class', 'mediaInfo');
$div->appendChild($p);
// dump($element);
// die();
//
$element->parentNode->replaceChild($div, $element);
}
$html = $dom->saveHTML();
return $html;
}