Refactor link backend

This commit is contained in:
Julian Prieber 2024-06-18 14:58:08 +02:00
parent bdbaee1f15
commit 80491edbb2
1 changed files with 75 additions and 314 deletions

View File

@ -146,58 +146,32 @@ class UserController extends Controller
//Show add/update form //Show add/update form
public function AddUpdateLink($id = 0) public function AddUpdateLink($id = 0)
{ {
$linkData = $id ? Link::find($id) : new Link(['typename' => 'link', 'id' => '0']);
if ($id !== 0) { $data = [
$linkData = Link::find($id); 'LinkTypes' => LinkType::get(),
} elseif ($id == 0) { 'LinkData' => $linkData,
$linkData = new Link(['typename' => 'link', 'id'=>'0']); 'LinkID' => $id,
} else { 'linkTypeID' => "1",
$linkData = new Link(['typename' => 'link', 'id'=>'0']); 'title' => "Predefined Site",
} ];
$data['LinkTypes'] = LinkType::get();
$data['LinkData'] = $linkData;
$data['LinkID'] = $id;
$data['linkTypeID'] = "1";
$data['title'] = "Predefined Site";
if (Route::currentRouteName() != 'showButtons') { if (Route::currentRouteName() != 'showButtons' && $link = DB::table('links')->where('id', $id)->first()) {
$links = DB::table('links')->where('id', $id)->first(); $bidToLinkTypeId = [
1 => "2", 2 => "2", 42 => "3", 43 => "4", 93 => "5", 6 => "6", 7 => "6", 44 => "7", 96 => "8",
$bid = $links->button_id; ];
if($bid == 1 or $bid == 2){
$data['linkTypeID'] = "2";
} elseif ($bid == 42) {
$data['linkTypeID'] = "3";
} elseif ($bid == 43) {
$data['linkTypeID'] = "4";
} elseif ($bid == 93) {
$data['linkTypeID'] = "5";
} elseif ($bid == 6 or $bid == 7) {
$data['linkTypeID'] = "6";
} elseif ($bid == 44) {
$data['linkTypeID'] = "7";
} elseif ($bid == 96) {
$data['linkTypeID'] = "8";
} else {
$data['linkTypeID'] = "1";
}
$data['linkTypeID'] = $bidToLinkTypeId[$link->button_id] ?? "1";
$data['title'] = LinkType::where('id', $data['linkTypeID'])->value('title'); $data['title'] = LinkType::where('id', $data['linkTypeID'])->value('title');
} }
foreach ($data['LinkTypes']->toArray() as $key => $val) { $data['SelectedLinkType'] = $data['LinkTypes']->firstWhere('typename', $linkData['typename']);
if ($val['typename'] === $linkData['typename']) {
$data['SelectedLinkType'] = $val;
break;
}
}
return view('studio/edit-link', $data); return view('studio/edit-link', $data);
} }
//Save add link //Save add link
public function saveLink(request $request) public function saveLink(Request $request)
{ {
$request->validate([ $request->validate([
'link' => 'sometimes|exturl', 'link' => 'sometimes|exturl',
@ -206,290 +180,77 @@ class UserController extends Controller
$linkType = LinkType::find($request->linktype_id); $linkType = LinkType::find($request->linktype_id);
$LinkTitle = ($request->link_text ?? $request->link_title) ?? $request->title; $LinkTitle = ($request->link_text ?? $request->link_title) ?? $request->title;
$LinkURL = $request->link_url ?? $request->link; $LinkURL = $request->link_url ?? $request->link;
$OrigLink = Link::find($request->linkid); $OrigLink = Link::find($request->linkid);
$customParams = []; $customParams = [];
foreach ($request->all() as $key => $param) { foreach ($request->all() as $key => $param) {
//echo $key . " = " . $param . "<br />"; if (str_starts_with($key, "_") || in_array($key, ['linktype_id', 'linktype_title', 'link_text', 'link_url'])) continue;
if (str_starts_with($key, "_") || in_array($key, ['linktype_id', 'linktype_title', 'link_text', 'link_url']))
continue;
$customParams[$key] = $param; $customParams[$key] = $param;
} }
$userId = Auth::user()->id; $userId = Auth::user()->id;
$button = Button::where('name', $request->button)->first(); $button = Button::where('name', $request->button)->first();
if ($button && empty($LinkTitle)) $LinkTitle = $button->alt;
if ($button && empty($LinkTitle))
$LinkTitle = $button->alt;
if ($linkType->typename == 'video' && empty($LinkTitle)) { if ($linkType->typename == 'video' && empty($LinkTitle)) {
$embed = OEmbed::get($LinkURL); $embed = OEmbed::get($LinkURL);
if ($embed) { if ($embed) $LinkTitle = $embed->data()['title'];
$LinkTitle = $embed->data()['title'];
}
} }
$message = (ucwords($button?->name) ?? ucwords($linkType->typename)) . " has been "; $message = (ucwords($button?->name) ?? ucwords($linkType->typename)) . " has been ";
$linkData = [
'link' => $LinkURL,
'title' => $LinkTitle,
'user_id' => $userId,
'button_id' => $button?->id
];
if ($linkType->typename == "link" && $customParams['GetSiteIcon'] == "1") {
$linkData['button_id'] = "2";
} elseif ($linkType->typename == "link") {
$linkData['button_id'] = "1";
} elseif ($linkType->typename == "spacer") {
$linkData['title'] = $customParams['height'] ?? null;
$linkData['button_id'] = "43";
} elseif ($linkType->typename == "heading") {
$linkData['button_id'] = "42";
} elseif ($linkType->typename == "text") {
$sanitizedText = $request->text;
$sanitizedText = strip_tags($sanitizedText, '<a><p><strong><i><ul><ol><li><blockquote><h2><h3><h4>');
$sanitizedText = preg_replace("/<a([^>]*)>/i", "<a $1 rel=\"noopener noreferrer nofollow\">", $sanitizedText);
$sanitizedText = strip_tags_except_allowed_protocols($sanitizedText);
$linkData['title'] = $sanitizedText;
$linkData['button_id'] = "93";
} elseif (in_array($linkType->typename, ["email", "telephone"])) {
$linkData['button_id'] = $button?->id;
} elseif ($linkType->typename == "vcard") {
$data = $request->only([
'prefix', 'first_name', 'middle_name', 'last_name', 'suffix', 'nickname',
'organization', 'vtitle', 'role', 'work_url', 'email', 'work_email',
'home_phone', 'work_phone', 'cell_phone', 'home_address_label', 'home_address_street',
'home_address_city', 'home_address_state', 'home_address_zip', 'home_address_country',
'work_address_label', 'work_address_street', 'work_address_city', 'work_address_state',
'work_address_zip', 'work_address_country'
]);
$linkData['link'] = json_encode($data);
$linkData['button_id'] = 96;
}
if ($OrigLink) { if ($OrigLink) {
//EDITING EXISTING $OrigLink->update($linkData);
$isCustomWebsite = $customParams['GetSiteIcon'] ?? null;
$SpacerHeight = $customParams['height'] ?? null;
if($linkType->typename == "link" and $isCustomWebsite == "1"){
$OrigLink->update([
'link' => $LinkURL,
'title' => $LinkTitle,
'button_id' => "2",
]);
}elseif($linkType->typename == "link"){
$OrigLink->update([
'link' => $LinkURL,
'title' => $LinkTitle,
'button_id' => "1",
]);
}elseif($linkType->typename == "spacer"){
$OrigLink->update([
'link' => $LinkURL,
'title' => $customParams['height'] ?? null,
'button_id' => "43",
]);
}elseif($linkType->typename == "heading"){
$OrigLink->update([
'link' => $LinkURL,
'title' => $LinkTitle,
'button_id' => "42",
]);
}elseif($linkType->typename == "text"){
$sanitizedText = $request->text;
$sanitizedText = strip_tags($sanitizedText, '<a><p><strong><i><ul><ol><li><blockquote><h2><h3><h4>');
$sanitizedText = preg_replace("/<a([^>]*)>/i", "<a $1 rel=\"noopener noreferrer nofollow\">", $sanitizedText);
$sanitizedText = strip_tags_except_allowed_protocols($sanitizedText);
$OrigLink->update([
'button_id' => "93",
'title' => $sanitizedText,
]);
}elseif($linkType->typename == "email"){
$OrigLink->update([
'link' => $LinkURL,
'button_id' => $button?->id,
'title' => $LinkTitle,
]);
}elseif($linkType->typename == "telephone"){
$OrigLink->update([
'link' => $LinkURL,
'button_id' => $button?->id,
'title' => $LinkTitle,
]);
}elseif($linkType->typename == "vcard"){
$prefix = $request->input('prefix');
$firstName = $request->input('first_name');
$middleName = $request->input('middle_name');
$lastName = $request->input('last_name');
$suffix = $request->input('suffix');
$nickname = $request->input('nickname');
$organization = $request->input('organization');
$vtitle = $request->input('vtitle');
$role = $request->input('role');
$workUrl = $request->input('work_url');
$email = $request->input('email');
$workEmail = $request->input('work_email');
$homePhone = $request->input('home_phone');
$workPhone = $request->input('work_phone');
$cellPhone = $request->input('cell_phone');
$homeAddressLabel = $request->input('home_address_label');
$homeAddressStreet = $request->input('home_address_street');
$homeAddressCity = $request->input('home_address_city');
$homeAddressState = $request->input('home_address_state');
$homeAddressZip = $request->input('home_address_zip');
$homeAddressCountry = $request->input('home_address_country');
$workAddressLabel = $request->input('work_address_label');
$workAddressStreet = $request->input('work_address_street');
$workAddressCity = $request->input('work_address_city');
$workAddressState = $request->input('work_address_state');
$workAddressZip = $request->input('work_address_zip');
$workAddressCountry = $request->input('work_address_country');
// Create an array with all the input fields
$data = [
'prefix' => $request->input('prefix'),
'first_name' => $request->input('first_name'),
'middle_name' => $request->input('middle_name'),
'last_name' => $request->input('last_name'),
'suffix' => $request->input('suffix'),
'nickname' => $request->input('nickname'),
'organization' => $request->input('organization'),
'vtitle' => $request->input('vtitle'),
'role' => $request->input('role'),
'work_url' => $request->input('work_url'),
'email' => $request->input('email'),
'work_email' => $request->input('work_email'),
'home_phone' => $request->input('home_phone'),
'work_phone' => $request->input('work_phone'),
'cell_phone' => $request->input('cell_phone'),
'home_address_label' => $request->input('home_address_label'),
'home_address_street' => $request->input('home_address_street'),
'home_address_city' => $request->input('home_address_city'),
'home_address_state' => $request->input('home_address_state'),
'home_address_zip' => $request->input('home_address_zip'),
'home_address_country' => $request->input('home_address_country'),
'work_address_label' => $request->input('work_address_label'),
'work_address_street' => $request->input('work_address_street'),
'work_address_city' => $request->input('work_address_city'),
'work_address_state' => $request->input('work_address_state'),
'work_address_zip' => $request->input('work_address_zip'),
'work_address_country' => $request->input('work_address_country'),
];
// Convert the array to JSON format
$json = json_encode($data);
// Set the JSON as the variable $links->link, or null if the JSON is empty
$LinkURL = $json ? $json : null;
$OrigLink->update([
'link' => $LinkURL,
'button_id' => 96,
'title' => $LinkTitle,
]);
}else{
$OrigLink->update([
'link' => $LinkURL,
'title' => $LinkTitle,
'button_id' => $button?->id,
]);
}
$message .= "updated"; $message .= "updated";
} else { } else {
// ADDING NEW $links = new Link($linkData);
$isCustomWebsite = $customParams['GetSiteIcon'] ?? null;
$SpacerHeight = $customParams['height'] ?? null;
$links = new Link;
$links->link = $LinkURL;
$links->user_id = $userId; $links->user_id = $userId;
if($linkType->typename == "spacer"){
$links->title = $SpacerHeight;
}else{
$links->title = $LinkTitle;
}
if($linkType->typename == "link" and $isCustomWebsite == "1"){
$links->button_id = "2";
}elseif($linkType->typename == "link"){
$links->button_id = "1";
}elseif($linkType->typename == "spacer"){
$links->button_id = "43";
}elseif($linkType->typename == "heading"){
$links->button_id = "42";
}elseif($linkType->typename == "text"){
$sanitizedText = $request->text;
$sanitizedText = strip_tags($sanitizedText, '<a><p><strong><i><ul><ol><li><blockquote><h2><h3><h4>');
$sanitizedText = preg_replace("/<a([^>]*)>/i", "<a $1 rel=\"noopener noreferrer nofollow\">", $sanitizedText);
$sanitizedText = strip_tags_except_allowed_protocols($sanitizedText);
$links->button_id = "93";
$links->title = $sanitizedText;
}elseif($linkType->typename == "email"){
$links->button_id = $button?->id;
}elseif($linkType->typename == "telephone"){
$links->button_id = $button?->id;
}elseif($linkType->typename == "vcard"){
$prefix = $request->input('prefix');
$firstName = $request->input('first_name');
$middleName = $request->input('middle_name');
$lastName = $request->input('last_name');
$suffix = $request->input('suffix');
$nickname = $request->input('nickname');
$organization = $request->input('organization');
$vtitle = $request->input('vtitle');
$role = $request->input('role');
$workUrl = $request->input('work_url');
$email = $request->input('email');
$workEmail = $request->input('work_email');
$homePhone = $request->input('home_phone');
$workPhone = $request->input('work_phone');
$cellPhone = $request->input('cell_phone');
$homeAddressLabel = $request->input('home_address_label');
$homeAddressStreet = $request->input('home_address_street');
$homeAddressCity = $request->input('home_address_city');
$homeAddressState = $request->input('home_address_state');
$homeAddressZip = $request->input('home_address_zip');
$homeAddressCountry = $request->input('home_address_country');
$workAddressLabel = $request->input('work_address_label');
$workAddressStreet = $request->input('work_address_street');
$workAddressCity = $request->input('work_address_city');
$workAddressState = $request->input('work_address_state');
$workAddressZip = $request->input('work_address_zip');
$workAddressCountry = $request->input('work_address_country');
// Create an array with all the input fields
$data = [
'prefix' => $request->input('prefix'),
'first_name' => $request->input('first_name'),
'middle_name' => $request->input('middle_name'),
'last_name' => $request->input('last_name'),
'suffix' => $request->input('suffix'),
'nickname' => $request->input('nickname'),
'organization' => $request->input('organization'),
'vtitle' => $request->input('vtitle'),
'role' => $request->input('role'),
'work_url' => $request->input('work_url'),
'email' => $request->input('email'),
'work_email' => $request->input('work_email'),
'home_phone' => $request->input('home_phone'),
'work_phone' => $request->input('work_phone'),
'cell_phone' => $request->input('cell_phone'),
'home_address_label' => $request->input('home_address_label'),
'home_address_street' => $request->input('home_address_street'),
'home_address_city' => $request->input('home_address_city'),
'home_address_state' => $request->input('home_address_state'),
'home_address_zip' => $request->input('home_address_zip'),
'home_address_country' => $request->input('home_address_country'),
'work_address_label' => $request->input('work_address_label'),
'work_address_street' => $request->input('work_address_street'),
'work_address_city' => $request->input('work_address_city'),
'work_address_state' => $request->input('work_address_state'),
'work_address_zip' => $request->input('work_address_zip'),
'work_address_country' => $request->input('work_address_country'),
];
// Convert the array to JSON format
$json = json_encode($data);
// Set the JSON as the variable $links->link, or null if the JSON is empty
$links->link = $json ? $json : null;
$links->button_id = 96;
}else{
$links->button_id = $button?->id;
}
if(empty($links->button_id)) {
throw new \Exception('Invalid link');
}
$links->save(); $links->save();
$links->order = ($links->id - 1); $links->order = ($links->id - 1);
$links->save(); $links->save();
$message .= "added"; $message .= "added";
} }
if ($request->input('param') == 'add_more') { $redirectUrl = $request->input('param') == 'add_more' ? 'studio/add-link' : 'studio/links';
return Redirect('studio/add-link') return Redirect($redirectUrl)->with('success', $message);
->with('success', $message);
} else {
return Redirect('studio/links')
->with('success', $message);
}
} }
public function sortLinks(Request $request) public function sortLinks(Request $request)