415 lines
13 KiB
PHP
Executable file
415 lines
13 KiB
PHP
Executable file
<?php
|
|
|
|
namespace App\Http\Controllers\SyS\Tools;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\IQContentSite;
|
|
use App\Models\IQContentSiteField;
|
|
use App\Models\IQContentTree;
|
|
use App\Models\IQContentTreeNode;
|
|
use App\Models\TravelGuide;
|
|
use Request;
|
|
use Validator;
|
|
|
|
class ContentLinkController extends Controller
|
|
{
|
|
|
|
private $tree = [];
|
|
/**
|
|
* ContentSiteController constructor.
|
|
*/
|
|
public function __construct()
|
|
{
|
|
// $this->middleware('auth');
|
|
}
|
|
|
|
public function index()
|
|
{
|
|
$val = [];
|
|
$text = "";
|
|
$travelGuides = TravelGuide::all();
|
|
foreach ($travelGuides as $travelGuide){
|
|
if(strpos($travelGuide->full_text, "<h1><br></h1>") !== false){
|
|
$val[$travelGuide->id] = "<h1><br></h1>";
|
|
}
|
|
}
|
|
|
|
foreach ($travelGuides as $travelGuide){
|
|
if(strpos($travelGuide->full_text, "<h1") !== false){
|
|
$val[$travelGuide->id] = "<h1";
|
|
}
|
|
}
|
|
|
|
$travelGuide = TravelGuide::find(203);
|
|
$text = $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()
|
|
{
|
|
$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 treeTitleStore()
|
|
{
|
|
|
|
$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();
|
|
}
|
|
|
|
public function h1ToTitleTravelGuide()
|
|
{
|
|
$TravelGuides = TravelGuide::all();
|
|
foreach ($TravelGuides as $travelGuide){
|
|
if(strpos($travelGuide->full_text,'<html><body><h1>' )){
|
|
$dom = new \DOMDocument('1.0', 'utf-8');
|
|
@$dom->loadHTML(mb_convert_encoding($travelGuide->full_text, 'HTML-ENTITIES', 'UTF-8'));
|
|
$elements = $dom->getElementsByTagName('h1');
|
|
|
|
foreach ($elements as $element) {
|
|
if($element->nodeValue != ""){
|
|
var_dump($travelGuide->id);
|
|
var_dump($element->nodeValue);
|
|
echo "<br>";
|
|
var_dump($travelGuide->name);
|
|
echo "<br>";
|
|
echo "--";
|
|
echo "<br>";
|
|
|
|
$new_text = preg_replace('/<h1[^>]*>([\s\S]*?)<\/h1[^>]*>/', '', $travelGuide->full_text);
|
|
|
|
$travelGuide->name = $element->nodeValue;
|
|
$travelGuide->full_text = $new_text;
|
|
$travelGuide->save();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
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 = [];
|
|
if(isset($input['text'])){
|
|
$out = $this->ul_to_array($input['text']);
|
|
$this->array_to_nodes($out);
|
|
}
|
|
die("done");
|
|
$data = [
|
|
'text' => $input['text'],
|
|
'values' => $ret,
|
|
];
|
|
return view('iq.tools.links', $data);
|
|
}
|
|
|
|
public function array_to_nodes($array, $lvl = 1, $parent_id = 1, $pos=100){
|
|
|
|
|
|
if(is_array($array)){
|
|
foreach ($array as $node){
|
|
if(isset($node['slug'])){
|
|
|
|
$slug = substr($node['slug'], 0, 80);
|
|
// $slug = substr($node['slug'], 0, strrpos($slug, " "));
|
|
|
|
$name = substr($node['name'], 0, 255);
|
|
// $name = substr($node['name'], 0, strrpos($name, " "));
|
|
|
|
|
|
$data = [
|
|
'tree_id' => 1,
|
|
'parent_id' => $parent_id,
|
|
'lvl' => $lvl,
|
|
'name' => $name,
|
|
'identifier' => $slug,
|
|
'active' => false,
|
|
'pos' => $pos++,
|
|
];
|
|
$tree_node = IQContentTreeNode::create($data);
|
|
|
|
|
|
$travel_guides = TravelGuide::whereSlug($node['slug'])->get();
|
|
foreach ($travel_guides as $travel_guide){
|
|
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]);
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
if(isset($node['children']) && is_array($node['children'])){
|
|
$this->array_to_nodes($node['children'], $lvl + 1, $tree_node->id, $pos);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
public function ul_to_array($ol){
|
|
if(is_string($ol)){
|
|
if(!$ol = simplexml_load_string($ol)) {
|
|
trigger_error("Syntax error in UL/LI structure");
|
|
return FALSE;
|
|
}
|
|
return $this->ul_to_array($ol);
|
|
} else if(is_object($ol)){
|
|
$output = array();
|
|
foreach($ol->li as $li){
|
|
|
|
$tmp = false;
|
|
if(isset($li->ol)){
|
|
$tmp = $this->ul_to_array($li->ol);
|
|
}
|
|
|
|
if($li->count()){
|
|
|
|
$str = (string) $li;
|
|
|
|
$a = new \SimpleXMLElement($li->children()->asXML());
|
|
$str = (string) $a[0]." ".$str;
|
|
$str = str_replace("\n", "", $str);
|
|
$str = str_replace("\r", "", $str);
|
|
$str = str_replace("\t", "", $str);
|
|
$str = preg_replace(array('/\s{2,}/', '/[\t\n]/'), ' ', $str);
|
|
|
|
if(trim($str) !== "" && $str !== null){
|
|
$slug = (string) $a['href'];
|
|
$link = explode("/", $slug);
|
|
|
|
$link1 = array_pop($link);
|
|
$link1 = str_replace('.htm', '',$link1);
|
|
$output[] = ['slug'=> $link1, 'name'=>$str, 'children'=>$tmp];
|
|
}
|
|
}else{
|
|
$str = (string) $li;
|
|
$str = str_replace("\n", "", $str);
|
|
$str = str_replace("\r", "", $str);
|
|
$str = str_replace("\t", "", $str);
|
|
if(trim($str) !== "" && $str !== null){
|
|
|
|
$output[] = ['slug'=>'', 'name'=>$str, 'children'=>$tmp];
|
|
}
|
|
}
|
|
|
|
}
|
|
return $output;
|
|
} else {
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
|
*/
|
|
public function rindex()
|
|
{
|
|
$data = [
|
|
'text' => "",
|
|
'values' => [],
|
|
];
|
|
return view('iq.content.tools.redirects', $data);
|
|
}
|
|
|
|
|
|
|
|
public function rstore()
|
|
{
|
|
|
|
$iqContentTree = IQContentTree::find(2);
|
|
$this->makeTree($iqContentTree);
|
|
$input = Request::all();
|
|
$ret = [];
|
|
|
|
if(isset($input['text'])){
|
|
|
|
|
|
$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 = [];
|
|
$elements = $dom->getElementsByTagName($tag)->item(0);
|
|
|
|
foreach($elements as $node){
|
|
foreach($node->childNodes as $child) {
|
|
$ret[] = array($child->nodeName => $child->nodeValue);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* $tags = ['a']; foreach ($tags as $tag){
|
|
$domElements = [];
|
|
$elements = $dom->getElementsByTagName($tag);
|
|
foreach ($elements as $element) {
|
|
$domElements[] = $element;
|
|
|
|
}
|
|
foreach ($domElements as $domElement) {
|
|
$r = "-----";
|
|
$href = $domElement->getAttribute('href');
|
|
$link = explode("/", $href);
|
|
|
|
$link1 = array_pop($link);
|
|
$link1 = str_replace('.html', '',$link1);
|
|
$link1 = str_replace('-', '',$link1);
|
|
if(isset($this->tree[$link1])){
|
|
$r = $this->tree[$link1];
|
|
}else{
|
|
$link1 = array_pop($link);
|
|
$link1 = str_replace('.html', '',$link1);
|
|
$link1 = str_replace('-', '',$link1);
|
|
if(isset($this->tree[$link1])){
|
|
$r = $this->tree[$link1];
|
|
}
|
|
}
|
|
|
|
$ret[] = "Redirect 301 /".$href." ".$r;
|
|
|
|
}
|
|
}*/
|
|
|
|
}
|
|
$data = [
|
|
'text' => $input['text'],
|
|
'values' => $ret,
|
|
];
|
|
|
|
return view('iq.content.tools.redirects', $data);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function makeTree(IQContentTree $iq_content_tree, $lvl = 0, $parent_id = false, $url = "")
|
|
{
|
|
|
|
if ($parent_id) {
|
|
//where('active', true)
|
|
$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();
|
|
}
|
|
|
|
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();
|
|
$this->tree[str_replace('-', '', $node->identifier)] = url($url . $node->identifier);
|
|
|
|
if ($children) {
|
|
$this->makeTree($iq_content_tree, $lvl + 1, $node->id, $url . $node->identifier . "/");
|
|
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
|
|
}
|