File: /var/www/vhost/disk-apps/qas.sports-crowd.com/app/Http/Controllers/AdvertisingAppController.php
<?php
namespace App\Http\Controllers;
use App\AppSection;
use Illuminate\Http\Request;
use App\Tag;
use App\Banner;
use App\PopupTags;
use App\PopupEmbed;
use App\TypeAction;
use App\Parameter;
use App\Category;
use App\BannerTags;
use App\BusinessCategory;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use DB;
use Illuminate\Support\Facades\Auth;
class AdvertisingAppController extends Controller
{
public function search($infoo)
{
try {
if ($infoo) {
$exist = Banner::where('id', $infoo)->with('bannerTags')->first();
return response(array("respuesta" => true, "type" => "success", "title" => "", "m" => __('messages.screen_banners_tag14'), "data" => $exist));
}
} catch (\Exception $e) {
return response(array("respuesta" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.screen_banners_tag15'), "data" => $e->getMessage()));
}
}
public function searchPopup($popupId)
{
try {
if ($popupId) {
$exist = PopupEmbed::where('id', $popupId)->with('popupTag')->first();
return response(array("respuesta" => true, "type" => "success", "title" => "", "m" => __('messages.screen_banners_tag14'), "data" => $exist));
}
} catch (\Exception $e) {
return response(array("respuesta" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.screen_banners_tag24'), "data" => $e->getMessage()));
}
}
public function index()
{
$parameters = Parameter::first();
$banners = Banner::where('active', 1)->orderBy('banners.order', 'ASC')->get();
$popups = PopupEmbed::where('active', 1)->get();
// logica para banner
$returnBanners = [];
foreach ($banners as $banner) {
if (!Str::contains($banner['image'], 'asset')) {
$banner['url_image'] = config('filesystems.disks.s3.url') . '/banners/' . $banner['image'];
} else {
$banner['id'] = null;
$banner['url_image'] = '../img/upload.png';
}
if (!$this->findObjectByNameAndTarget($returnBanners, $banner['name'], $banner['target'])) {
$returnBanners[] = $banner;
}
}
// logica para popups
$returnPopups = [];
foreach ($popups as $popup) {
if (!Str::contains($popup['image'], 'asset')) {
$popup['url_image'] = config('filesystems.disks.s3.url') . '/popups/' . $popup['image'];
} else {
$popup['id'] = null;
$popup['url_image'] = '../img/upload.png';
}
if (!$this->findObjectByTitleAndTarget($returnPopups, $popup['title'], $popup['target'])) {
$returnPopups[] = $popup;
}
}
if ($parameters->sucursal_products) {
$categories = Category::where('active', 1)->with('sucursal')->get();
} else {
$categories = Category::where('active', 1)->get();
}
$typeActions = TypeAction::where('active', true)->get();
$multiselectItems = Tag::where('active', true)->get();
//-----------------------------------search_categories_with_popups----------------------------------------------
$popupCategories = DB::table('business_categories as bc')
->select('bc.id', 'bc.name')
->join('popup_embeds as pe', DB::raw('pe.target'), '=', DB::raw('CONCAT("category-", bc.id)'))
->groupBy('bc.id')
->get();
//---------------------------------END_search_categories_with_popups--------------------------------------------
//-----------------------------------search_categories_with_banners---------------------------------------------
$bannerCategories = DB::table('business_categories as bc')
->select('bc.id', 'bc.name')
->join('banners as b', DB::raw('b.target'), '=', DB::raw('CONCAT("category-", bc.id)'))
->groupBy('bc.id')
->get();
//---------------------------------END_search_categories_with_banners-------------------------------------------
//--------------------------------------search_business_categories----------------------------------------------
$bussinesCategories = BusinessCategory::where('active', true)->get();
//------------------------------------END_search_business_categories--------------------------------------------
//--------------------------------------search_app_sections----------------------------------------------
$appSections = AppSection::select('id', 'name', 'path')->where('active', true)->orderBy('name', 'ASC')->get()->toArray();
if (count($appSections) > 0) {
$appSections[] = [
'id' => 0,
'name' => 'Otra Sección',
'path' => 'none',
];
}
//------------------------------------END_search_app_sectionss--------------------------------------------
return view('advertising_app.advertisingOption')
->with('parameters', $parameters)
->with('categories', $categories)
->with('typeActions', $typeActions)
->with('multiselectItems', $multiselectItems)
->with('banners', $returnBanners)
->with('popupEmbeds', $returnPopups)
->with('popupCategories', $popupCategories)
->with('bannerCategories', $bannerCategories)
->with('bussinesCategories', $bussinesCategories)
->with('appSections', $appSections);
}
private function findObjectByNameAndTarget($array, $name, $target)
{
foreach ($array as $element) {
if ($name == $element['name'] && $target == $element['target']) {
return $element;
}
}
return false;
}
private function findObjectByTitleAndTarget($array, $name, $target)
{
foreach ($array as $element) {
if ($name == $element['title'] && $target == $element['target']) {
return $element;
}
}
return false;
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create(Request $request)
{
try {
if (Banner::where([['active', true], ['name', $request->input('name')], ['target', $request->input('target')]])->first()) {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.already_exists', ['name' => $request->input('name')]), "data" => null));
}
$count = Banner::where([['active', true], ['target', $request->input('target')]])->count();
$tags = $request["tags"] ?? $request["generalMultiselect"];
$data = $request->except(['generalMultiselect', 'tags', 'category_id']);
if (!$data['name']) {
$data['name'] = 'Banner' . $count;
}
if (!$data['order']) {
$data['order'] = $count;
}
if (!isset($data['active'])) {
$data['active'] = true;
}
if ($data['type_action_id'] == "0") {
$data['type_action_id'] = null;
}
if ($model = Banner::create($data)) {
if ($tags != null) {
foreach ($tags as $tagId) {
BannerTags::create([
'tag_id' => $tagId,
'banner_id' => $model->id
]);
}
}
$this->registerLog(Auth::user()->id, 'Crear publicación banner', json_encode($request->all()), "Create", $this->getModule($request));
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)
{
try {
$id = $request['id'];
if (Banner::where([['id', '!=', $id], ['active', true], ['name', $request->input('name')], ['target', $request->input('target')]])->first()) {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.already_exists', ['name' => $request->input('name')]), "data" => null));
}
$count = Banner::where([['active', true], ['target', $request->input('target')]])->count();
$tags = $request["tags"] ?? $request["generalMultiselect"];
$data = $request->except(['generalMultiselect', 'tags', 'category_id']);
if (!$data['name']) {
$data['name'] = 'Banner' . $count;
}
if (!$data['order']) {
$data['order'] = $count;
}
if ($data['type_action_id'] == "0") {
$data['type_action_id'] = null;
}
if (Banner::where('id', $id)->update($data)) {
BannerTags::where('banner_id', $id)->delete();
if ($tags != null) {
foreach ($tags as $tagId) {
BannerTags::create([
'tag_id' => $tagId,
'banner_id' => $id
]);
}
}
$this->registerLog(Auth::user()->id, 'Actualizar publicación banner', json_encode($request->all()), "Update", $this->getModule($request));
return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.updated_successfully'), "data" => $id));
} else {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_updating'), "data" => null));
}
} catch (\Exception $e) {
return response(
array(
"r" => false,
"type" => "error",
"title" => "Oops...",
"m" => __($e->getMessage()),
"data" => null
)
);
}
}
public function createPopup(Request $request)
{
$name = $request["name"];
if ($name) {
$exist = PopupEmbed::where([['title', $name], ['target', $request["target"]]])->first();
} else {
$exist = PopupEmbed::where([['title', $name], ['target', $request["target"]]])->first();
}
if (!$exist) {
$popupEmbed = new PopupEmbed();
$popupEmbed->title = $name ? $name : 'Popup' . PopupEmbed::get()->count();
$popupEmbed->type_action_id = $request["type_action_id"] == '0' ? null : $request["type_action_id"];
$popupEmbed->value = $request["value"];
$popupEmbed->msj = $request["description"];
$popupEmbed->target = $request["target"];
$popupEmbed->start_date = $request["start_date"];
$popupEmbed->end_date = $request["end_date"];
$popupEmbed->frequency = $request["frequency"];
$popupEmbed->active = 1;
$popupEmbed->text_button_ok = $request["text_button_ok"];
$popupEmbed->save();
$tags = $request["generalMultiselect"];
$request->request->remove('generalMultiselect');
if ($popupEmbed->id && $tags != null) {
foreach ($tags as $tagId) {
PopupTags::create([
'tag_id' => $tagId,
'popup_id' => $popupEmbed->id
]);
}
}
$this->registerLog(Auth::user()->id, 'Crear publicación popup', json_encode($request->all()), "Create", $this->getModule($request));
return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.screen_popup_tag14'), "data" => $popupEmbed->id));
} else {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.screen_popup_tag15'), "data" => null));
}
}
public function updatePopup(Request $request)
{
if ($request["id"]) {
$exist = PopupEmbed::where([['id', $request["id"]]])->first();
}
if ($exist) {
$id = $request["id"];
$popupEmbed = PopupEmbed::find($id);
$popupEmbed->title = $request["name"];
$popupEmbed->type_action_id = $request["type_action_id"];
$popupEmbed->value = $request["value"];
$popupEmbed->msj = $request["description"];
$popupEmbed->target = $request["target"];
$popupEmbed->start_date = $request["start_date"];
$popupEmbed->end_date = $request["end_date"];
$popupEmbed->frequency = $request["frequency"];
$popupEmbed->active = 1;
$popupEmbed->text_button_ok = $request["text_button_ok"];
$popupEmbed->update();
$tags = $request["generalMultiselect"];
$request->request->remove('generalMultiselect');
PopupTags::where('popup_id', $id)->delete();
if ($tags != null) {
foreach ($tags as $tagId) {
PopupTags::create([
'tag_id' => $tagId,
'popup_id' => $id
]);
}
}
$this->registerLog(Auth::user()->id, 'Actualizar publicación popup', json_encode($request->all()), "Update", $this->getModule($request));
return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.advertising.title_19'), "data" => $popupEmbed->id));
} else {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.screen_popup_tag17'), "data" => null));
}
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id) {}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function updateBanner(Request $request, $id)
{
if (!Banner::where([['id', '!=', $id], ['name', $request->input('name')]])->first()) {
if (Banner::where('id', $id)->update(array_slice($request->except('image'), 1))) {
$this->registerLog(Auth::user()->id, 'Actualizar publicación banner', json_encode($request->all()), "Update", $this->getModule($request));
return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.updated_successfully'), "data" => null));
} else {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_updating'), "data" => null));
}
} else {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.already_exists', ['name' => $request->input('name')]), "data" => null));
}
}
public function updatePopupEmbed(Request $request, $id)
{
if (!PopupEmbed::where([['id', '!=', $id], ['name', $request->input('name')]])->first()) {
if (PopupEmbed::where('id', $id)->update(array_slice($request->except('image'), 1))) {
$this->registerLog(Auth::user()->id, 'Actualizar publicación popup', json_encode($request->all()), "Update", $this->getModule($request));
return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.updated_successfully'), "data" => null));
} else {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_updating'), "data" => null));
}
} else {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.already_exists', ['name' => $request->input('name')]), "data" => null));
}
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy(Request $request, $id)
{
$banner = Banner::find($id);
try {
if ($banner) {
if (Storage::disk('s3')->exists(config('s3.business') . $banner->image)) {
Storage::disk('s3')->delete(config('s3.business') . $banner->image);
}
$banner->active = 0;
$banner->target = null;
$banner->update();
Banner::where('id', $id)->delete();
BannerTags::where('banner_id', $id)->delete();
$this->registerLog(Auth::user()->id, 'Eliminar publicación banner', json_encode($banner), "Delete", $this->getModule($request));
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 saveImageBanner(Request $request)
{
try {
$extension = $request->file('image')->getClientOriginalExtension();
$filenametostore = $request->id . '.' . $extension;
Storage::disk('s3')->put(config('s3.banners') . $filenametostore, fopen($request->file('image'), 'r+'), 'public');
$business_image = Banner::find($request->id);
$business_image->image = $filenametostore;
$business_image->update();
return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.updated_successfully'), "data" => null));
} catch (\Throwable $th) {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_updating'), "data" => $th->getMessage()));
}
}
public function destroyPopup(Request $request, $id)
{
$popup = PopupEmbed::find($id);
try {
if ($popup) {
if (Storage::disk('s3')->exists(config('s3.popups') . $popup->image)) {
Storage::disk('s3')->delete(config('s3.popups') . $popup->image);
}
$popup->active = 0;
$popup->target = null;
$popup->update();
PopupEmbed::where('id', $id)->delete();
PopupTags::where('popup_id', $id)->delete();
$this->registerLog(Auth::user()->id, 'Eliminar publicación popup', json_encode($popup), "Delete", $this->getModule($request));
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 saveImagePopupEmbed(Request $request)
{
try {
$extension = $request->file('image')->getClientOriginalExtension();
$filenametostore = $request->id . '.' . $extension;
Storage::disk('s3')->put(config('s3.popups') . $filenametostore, fopen($request->file('image'), 'r+'), 'public');
$business_image = PopupEmbed::find($request->id);
$business_image->image = $filenametostore;
$business_image->update();
return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.updated_successfully'), "data" => null));
} catch (\Throwable $th) {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_updating'), "data" => $th->getMessage()));
}
}
public function activateNameBanner(Request $request)
{
try {
$id = $request['id'];
$state = $request['state'];
$banner = Banner::find($id);
$banner->hide_name = $state;
$banner->update();
$this->registerLog(Auth::user()->id, 'Activar/inactivar publicación banner', json_encode($banner), "Update", $this->getModule($request));
return array('r' => true, 'd' => null, 'm' => __('messages.advertising.updated_successfully'));
} catch (\Throwable $th) {
return array('r' => false, 'd' => null, 'm' => __('messages.advertising.error_updating'));
}
}
public function activateNamePopup(Request $request)
{
try {
$id = $request['id'];
$state = $request['state'];
$popupEmbed = PopupEmbed::find($id);
$popupEmbed->hide_name = $state;
$popupEmbed->update();
$this->registerLog(Auth::user()->id, 'Activar/inactivar publicación popup', json_encode($popupEmbed), "Update", $this->getModule($request));
return array('r' => true, 'd' => null, 'm' => __('messages.advertising.updated_successfully'));
} catch (\Throwable $th) {
return array('r' => false, 'd' => null, 'm' => __('messages.advertising.error_updating'));
}
}
}