File: /var/www/vhost/disk-apps/demo.sports-crowd.com/app/Http/Controllers/NewsController.php
<?php
namespace App\Http\Controllers;
use App\ClubParameter;
use App\Publication;
use App\PublicationContent;
use App\PublicationTag;
use App\Tag;
use Illuminate\Http\Request;
use Datatables;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Auth;
class NewsController extends Controller
{
private $util;
private $newsCreationOptions = [];
public function __construct()
{
$this->util = new UtilController();
$this->newsCreationOptions[] = (object) ['option' => 'Si', 'value' => 'none'];
$this->newsCreationOptions[] = (object) ['option' => 'No', 'value' => 'none'];
}
public function index()
{
return view('news_club.list');
}
public function indexAdd($id = null)
{
$newsCreationOptions = $this->newsCreationOptions;
$multiselectItems = Tag::select('id', 'name')->where('active', true)->get();
$parameters = ClubParameter::first();
$view = view('news_club.create', compact('multiselectItems', 'newsCreationOptions', 'parameters'));
if ($id) {
$publication = Publication::find($id);
$view->with('publication', $publication);
}
return $view;
}
public function indexEdit($id)
{
$newsCreationOptions = $this->newsCreationOptions;
$publication = Publication::find($id);
$publicationContent = PublicationContent::where('publication_id', $id)->get();
$publicationContentLink = '';
$linkString = '';
$linkString .= $publication->image;
foreach ($publicationContent as $index => $content) {
$publicationContentLink .= $content->link;
if ($index < (count($publicationContent) - 1)) {
$publicationContentLink .= ",\n";
}
}
$multiselectItems = Tag::select('id', 'name')->where('active', true)->get();
$multiselectValues = PublicationTag::select('tag_id')->where('publication_id', $id)->get();
$parameters = ClubParameter::first();
return view('news_club.edit', compact('publication', 'linkString', 'publicationContentLink', 'multiselectItems', 'multiselectValues', 'newsCreationOptions', 'parameters'));
}
public function tableFilter()
{
DB::statement("SET sql_mode = ''");
$obj = Publication::select(
'publications.image',
'publications.id',
'publications.name',
'publications.init_date',
'publications.end_date',
'publications.description',
'publications.likes_enabled',
'publications.comments_enabled',
'publications.active',
'publications.created_at',
DB::raw('GROUP_CONCAT(DISTINCT(tags.name)) AS segmentation')
)
->leftjoin('publication_tag', 'publication_tag.publication_id', '=', 'publications.id')
->leftjoin('tags', function ($join) {
$join->on('tags.id', '=', 'publication_tag.tag_id')->where('tags.active', 1);
})
->where('publications.type', 'news')
->where('publications.active', true)
->with('publicationContent')
->groupBy('publications.id');
DB::statement("SET sql_mode = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'");
return Datatables::of($obj)
->addColumn('link', function ($obj) {
return isset($obj->publicationContent[0]) && $obj->publicationContent[0]->link
? "<a href='{$obj->publicationContent[0]->link}' target='_blank'>Ver noticia</a>"
: "";
})
->addColumn('image', function ($obj) {
$totalImages = $obj->image;
if ($totalImages) {
$images = array();
$images[] = $obj->image;
$name = $obj->name;
$id = $obj->id;
return $this->util->generateCarouselImagesPhotosClub($images, $name, $id);
} else {
return $this->util->generateEmptyImageColumn();
}
})
->addColumn('actions', function ($obj) {
$actions = '
<i class="fa fa-pencil iconMini" onClick="clickEdit(' . $obj->id . ')" data-id="' . $obj->id . '" title="Editar"></i>
<i class="fa fa-trash iconMini" onClick="clickDelete(' . $obj->id . ')" data-id="' . $obj->id . '" title="Eliminar"></i>
<i class="fa fa-copy iconMini" onClick="clickCopy(' . $obj->id . ')" data-id="' . $obj->id . '" title="Copiar"></i>
';
return $actions;
})
->editColumn('created_at', function ($obj) {
return \Carbon\Carbon::parse($obj->created_at)->format('Y-m-d h:i:s A');
})
->editColumn('active', function ($obj) {
if ($obj->active == 0) {
return '<div class="switch"><label><div class="checkbox checbox-switch switch-success"> <label> No <input type="checkbox" class="chk" onChange="chk(' . $obj->id . ')" data-id="' . $obj->id . '" id="Checkactive' . $obj->id . '" name="Checkactivo" /> <span></span>Si </label></div> </label> </div>';
} else {
return '<div class="switch"><label> <div class="checkbox checbox-switch switch-success"> <label> No <input type="checkbox" class="chk" onChange="chk(' . $obj->id . ')" data-id="' . $obj->id . '" id="Checkactive' . $obj->id . '" name="Checkactivo" checked="" /><span></span> Si </label> </div> </label> </div>';
}
})
->rawColumns(['active', 'actions', 'image', 'link'])
->make(true);
}
public function create(Request $request)
{
try {
if (is_null($request->input('link')) && is_null($request->input('description'))) {
return response(
array(
"r" => false,
"type" => "error",
"title" => "Oops...",
"m" => "Debe ingresar una noticia",
"data" => null
)
);
}
$urlNews = $request["current_url"];
$request->request->remove('current_url');
$link = $request["link"];
$request->request->remove('link');
$textNews = $request["description"];
$createNews = $request["create-news"];
$request->request->remove('create-news');
$request->request->remove('urls');
$type = 'news';
$publishertype = 'admin';
$userId = Auth::user()->id;
$request->merge(['publisher_type' => $publishertype]);
$request->merge(['user_id' => $userId]);
$request->merge(['type' => $type]);
$request->request->remove('tags');
$tags = $request["tags"];
$request->request->remove('tags');
$data = $request->except(['generalMultiselect', 'tags']);
$textNotification = $request["text_notification_push"];
$request->request->remove('text_notification_push');
$date = $request["date"];
$request->request->remove('date');
$time = $request["time"];
$request->request->remove('time');
if ($model = Publication::create($data)) {
if ($tags != null) {
foreach ($tags as $tagId) {
PublicationTag::create([
'tag_id' => $tagId,
'publication_id' => $model->id
]);
}
}
if ($createNews == 'si') {
$personalLinkNews = $urlNews . $model->id;
if (isset($link)) {
$link .= ', ' . $personalLinkNews;
} else {
$link .= $personalLinkNews;
}
}
if ($link) {
if (strpos($link, ',') !== false) {
$linksArray = explode(',', $link);
foreach ($linksArray as $individualLink) {
$publicationContent = PublicationContent::firstOrCreate(
['publication_id' => $model->id, 'link' => $individualLink],
['publication_id' => $model->id, 'link' => $individualLink]
);
}
} else {
$publicationContent = PublicationContent::firstOrCreate(
['publication_id' => $model->id, 'link' => $link],
['publication_id' => $model->id, 'link' => $link]
);
}
}
if ($request["enable_notification_push"]) {
NotificationPushConfigController::pushNotificationClub($tags, $textNotification, $date, $time, $model->id);
}
return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.created_successfully'), "data" => $model->id));
} else {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_creating'), "data" => null));
}
} catch (\Exception $e) {
return response(
array(
"r" => false,
"type" => "error",
"title" => "Oops...",
"m" => __($e->getMessage()),
"data" => null
)
);
}
}
public function update(Request $request, $id)
{
try {
$deleteImageArray = $request["deleteFilesArray"];
$request->request->remove('deleteFilesArray');
Publication::whereIn('image', $deleteImageArray)->where('id', $id)->update(['image' => null]);
if (is_null($request->input('link')) && is_null($request->input('description'))) {
return response(
array(
"r" => false,
"type" => "error",
"title" => "Oops...",
"m" => "Debe ingresar una noticia",
"data" => null
)
);
}
$urlNews = $request["current_url"];
$request->request->remove('current_url');
$textNews = $request["description"];
$createNews = $request["create-news"];
$request->request->remove('create-news');
$request->request->remove('urls');
$request['id'] = $id;
$tags = $request["tags"];
$request->request->remove('tags');
$link = $request["link"];
$request->request->remove('link');
$publicationContent = PublicationContent::where('publication_id', $id)->delete();
$textNotification = $request["text_notification_push"];
$request->request->remove('text_notification_push');
$date = $request["date"];
$request->request->remove('date');
$time = $request["time"];
$request->request->remove('time');
$data = $request->except(['generalMultiselect', 'tags', 'enable_notification_push']);
if (Publication::where('id', $id)->update($data)) {
PublicationTag::where('publication_id', $id)->delete();
if ($tags != null) {
foreach ($tags as $tagId) {
PublicationTag::create([
'tag_id' => $tagId,
'publication_id' => $id
]);
}
}
if ($createNews == 'si') {
$personalLinkNews = $urlNews . $id;
if (isset($link)) {
$link .= ', ' . $personalLinkNews;
} else {
$link .= $personalLinkNews;
}
}
if ($link) {
$publicationContent = PublicationContent::where('publication_id', $id)->delete();
if (strpos($link, ',') !== false) {
$linksArray = explode(',', $link);
foreach ($linksArray as $individualLink) {
$trimmedLink = trim($individualLink);
if (!empty($trimmedLink)) {
$publicationContent = PublicationContent::firstOrCreate(
['publication_id' => $id, 'link' => $trimmedLink],
['publication_id' => $id, 'link' => $trimmedLink]
);
}
}
} else {
$publicationContent = PublicationContent::firstOrCreate(
['publication_id' => $id, 'link' => $link],
['publication_id' => $id, 'link' => $link]
);
}
}
if ($request["enable_notification_push"]) {
NotificationPushConfigController::pushNotificationClub($tags, $textNotification, $date, $time, $id);
}
return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.created_successfully'), "data" => $id));
} else {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_creating'), "data" => null));
}
} catch (\Exception $e) {
return response(
array(
"r" => false,
"type" => "error",
"title" => "Oops...",
"m" => __($e->getMessage()),
"data" => null
)
);
}
}
public function delete($id)
{
try {
if (Publication::where('id', $id)->delete()) {
return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.deleted_successfully'), "data" => null));
} else {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_removing'), "data" => null));
}
} catch (\Illuminate\Database\QueryException $e) {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.delete_relation_data'), "data" => null));
}
}
public function activate(Request $request)
{
try {
$id = $request['id'];
$state = $request['state'];
$instagram = Publication::find($id);
$instagram->active = $state;
$instagram->update();
return array('r' => true, 'd' => null, 'm' => __('messages.updated_successfully'));
} catch (\Throwable $th) {
return array('r' => false, 'd' => null, 'm' => __('messages.error_updating'));
}
}
public function deleteProductImage(Request $request)
{
$publicationId = $request['id'];
$link = $request['link'];
$publication = Publication::find($publicationId);
try {
if ($publication) {
$publication->image = null;
$publication->save();
}
return array('r' => true, 'd' => $publicationId, 'm' => trans('messages.screen_products_tag66'));
} catch (\Exception $e) {
return array('r' => false, 'd' => null, 'm' => trans('messages.screen_products_tag68'));
}
}
public function saveImages(Request $request)
{
try {
$imageUrls = [];
$publication = Publication::where('id', $request->id)->first();
$namePublication = $publication->name;
$image = $request->file('file');
$compressedImg = null; /* ImageCompressor::compress(
$image,
$image->getClientOriginalName()
); */
if (!$compressedImg) {
$compressedImg = $image;
}
$compressedSize = filesize($compressedImg);
$compressedSizeMB = number_format($compressedSize / 1048576, 2);
if ($compressedSizeMB > 3) {
return response([
"r" => false,
"type" => "error",
"title" => "Oops...",
"m" => __('messages.photos_club.size_photos'),
"data" => null
]);
}
$extension = $image->getClientOriginalExtension();
$filenametostore = $request->id . '_' . uniqid() . '.' . $extension;
Storage::disk('s3')->put(config('s3.default') . '/fan_engagement/photos/' . $namePublication . '/' . $filenametostore, fopen($compressedImg, 'r+'), 'public');
$url = config('filesystems.disks.s3.url') . '/fan_engagement/photos/' . $namePublication . '/' . $filenametostore;
$publication->image = $url;
$publication->save();
$imageUrls[] = $url;
return response([
"r" => true,
"type" => "success",
"title" => "",
"m" => __('messages.updated_successfully'),
"data" => $imageUrls
]);
} catch (\Throwable $th) {
return response([
"r" => false,
"type" => "error",
"title" => "Oops...",
"m" => __('messages.error_updating'),
"data" => $th->getMessage()
]);
} finally {
if (isset($compressedImg)) {
if (file_exists($compressedImg)) {
unlink($compressedImg);
}
}
}
}
}