File: //home/marketing.cfbon.ru/public_html/app/Http/Controllers/Profile/SocialNetworkController.php
<?php
namespace App\Http\Controllers\Profile;
use App\Http\Controllers\Controller;
use App\Http\Requests\Profile\SocialNetworkRequest;
use App\Models\ProfileInfo;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\View\View;
class SocialNetworkController extends Controller
{
public function create() : View
{
return view('profile.social-networks.create');
}
public function store(SocialNetworkRequest $request) : RedirectResponse
{
$optionData = ProfileInfo::getOption('social_networks');
$requestData = $request->validated();
$socialNetworks = $optionData ? json_decode($optionData->value, true) : [];
$socialNetworks[$this->getNewId($socialNetworks)] =
[
'id' => $this->getNewId($socialNetworks),
'label' => $requestData['label'],
'link' => $requestData['link'],
];
if ($optionData) {
$optionData->update(['value' => json_encode($socialNetworks, JSON_UNESCAPED_UNICODE)]);
} else {
ProfileInfo::create([
'title' => 'social_networks',
'value' => json_encode($socialNetworks, JSON_UNESCAPED_UNICODE),
]);
}
return redirect()->route('profile.index')->with('success', 'Запись добавлена');
}
public function edit(string $id)
{
$optionData = json_decode(ProfileInfo::getOption('social_networks')->value, true);
return view('profile.social-networks.edit', ['network' => (object)$optionData[$id]]);
}
public function update(SocialNetworkRequest $request, string $id)
{
$requestData = $request->validated();
$optionData = ProfileInfo::getOption('social_networks');
$socialNetworks = json_decode($optionData->value, true);
$socialNetworks[$id] =
[
'id' => $id,
'label' => $requestData['label'],
'link' => $requestData['link'],
];
$optionData->update(['value' => json_encode($socialNetworks, JSON_UNESCAPED_UNICODE)]);
return redirect()->back()->with('success', 'Запись изменена');
}
public function destroy(string $id)
{
$optionData = ProfileInfo::getOption('social_networks');
$socialNetworks = json_decode($optionData?->value, true) ?? [];
if ($socialNetworks[$id]) unset($socialNetworks[$id]);
$optionData->update(['value' => json_encode($socialNetworks, JSON_UNESCAPED_UNICODE)]);
return redirect()->route('profile.index')->with('success', 'Запись удалена');
}
private function getNewId(array $data) : int
{
return count($data) > 0 ? max(array_column($data, 'id')) + 1 : 1;
}
}