route('login'); } $userLogged = User::where('id', '=', Auth::id())->get()->first(); $allNotifications = DB::table('notifications')->orderBy('id', 'desc')->limit('3')->get(); $siteData = SiteContext::current(); $serverData = DB::table('sites_servers')->where('id','=',session('serverID'))->get()->first(); /* the middleware read the row a moment ago; the cached copy can lag a minute */ $fresh = $request->attributes->get('siteRow'); $without = (string) ($fresh->without ?? $siteData->without ?? '0'); /* plan without the website: the counters below would query for nothing */ if ($without === '1') { return view('site.homeWithout', [ 'userLogged' => $userLogged, 'allNotifications' => $allNotifications, 'topHref' => 'site', 'siteData' => $siteData, 'serverData' => $serverData, ]); } $pendReq = DB::connection('mysql_site_' . session('serverID'))->table('music_requests')->where('site_id', '=', session('siteID'))->where('ready','=','0')->get()->count(); $pendMes = DB::connection('mysql_site_' . session('serverID'))->table('messages')->where('site_id', '=', session('siteID'))->where('ready','=','0')->get()->count(); $pendCom = DB::connection('mysql_site_' . session('serverID'))->table('comments')->where('site_id', '=', session('siteID'))->where('ready','=','0')->get()->count(); $adsImage = DB::connection('mysql_site_' . session('serverID'))->table('ads')->where('site_id', '=', session('siteID'))->where('type','=','0')->orderBy('clicks','desc')->orderBy('id','desc')->get(); return view('site.home', ['userLogged' => $userLogged , 'allNotifications' => $allNotifications, 'topHref' => 'site', 'siteData' => $siteData, 'serverData' => $serverData, 'pendReq' => $pendReq, 'pendMes' => $pendMes, 'pendCom' => $pendCom, 'adsImage' => $adsImage]); } public function assets() { if (Auth::check() === false) { Auth::logout(); return redirect()->route('login'); } $userLogged = User::where('id', '=', Auth::id())->get()->first(); $allNotifications = DB::table('notifications')->orderBy('id', 'desc')->limit('3')->get(); $siteData = SiteContext::current(); $serverData = DB::table('sites_servers')->where('id','=',session('serverID'))->get()->first(); $allMedia = DB::connection('mysql_site_' . session('serverID'))->table('files_editor')->where('site_id', '=', session('siteID'))->orderBy('id','desc')->paginate( $perPage = '20', $columns = ['*'], $pageName = 'pg' ); return view('site.media', ['userLogged' => $userLogged , 'allNotifications' => $allNotifications, 'topHref' => 'site', 'siteData' => $siteData, 'serverData' => $serverData, 'allMedia' => $allMedia]); } public function uploadAsset(Request $request) { if (Auth::check() === false) { Auth::logout(); return redirect()->route('login'); } $siteData = SiteContext::current(); $serverData = DB::table('sites_servers')->where('id','=',session('serverID'))->get()->first(); /*$validatedData = $request->validate([ 'file.*' => 'required|image|mimes:jpg,png,jpeg,bmp,gif,webp|max:152400', ]);*/ $output = []; foreach ($request->file('file') as $key => $value ) { if ( ! is_array( $value ) ) { $output[] = [ 'name' => 'file[]', 'contents' => fopen( $value->getPathname(), 'r' ), 'Mime-Type'=> $value->getMimeType(), 'filename' => $value->getClientOriginalName() ]; continue; } } $output [] = [ 'name' => 'site_id', 'contents' => session('siteID') ]; $output [] = [ 'name' => 'fld', 'contents' => 'media' ]; $output [] = [ 'name' => 'md5', 'contents' => md5($siteData->name) ]; $client = new Client(); try { $response = $client->request("POST", 'https://'.$serverData->name.'/_apiBrasUpload/bras_brMultiple.php', [ 'multipart' => $output ]); } catch (\Throwable $e) { // dump de depuracao chegava ao cliente e a operacao morria aqui Log::warning('_apiBrasUpload falhou', ['site_id' => session('siteID'), 'erro' => $e->getMessage()]); return response()->json(['success' => false], 502); } $response = $response->getBody()->getContents(); $all = json_decode($response); foreach($all as $item){ DB::connection('mysql_site_' . session('serverID'))->table('files_editor')->insert([ 'site_id' => session('siteID'), 'source' => $item, 'type' => 'media', 'created_at' => NOW() ]); } } public function uploadThumb(Request $request) { if (Auth::check() === false) { Auth::logout(); return redirect()->route('login'); } $siteData = SiteContext::current(); $serverData = DB::table('sites_servers')->where('id','=',session('serverID'))->get()->first(); $validatedData = $request->validate([ 'file.*' => 'required|image|mimes:jpg,png,jpeg,bmp,gif,webp|max:102400', ]); $client = new Client(); try { $response = $client->request("POST", 'https://'.$serverData->name.'/_apiBrasUpload/bras_beUplThumb.php', [ 'multipart' => [ [ 'name' => 'file', 'filename' => $request->file('file')->getClientOriginalName(), 'Mime-Type'=> $request->file('file')->getMimeType(), 'contents' => fopen($request->file('file')->path(), 'r'), ], [ 'name' => 'ext', 'contents' => $request->file('file')->extension() ], [ 'name' => 'site_id', 'contents' => session('siteID') ], [ 'name' => 'md5', 'contents' => md5($siteData->name) ], [ 'name' => 'fld', 'contents' => $request->type ], [ 'name' => 'w', 'contents' => $request->w ], [ 'name' => 'h', 'contents' => $request->h ], ] ]); } catch (\Throwable $e) { // dump de depuracao chegava ao cliente e a operacao morria aqui Log::warning('_apiBrasUpload falhou', ['site_id' => session('siteID'), 'erro' => $e->getMessage()]); return response()->json(['success' => false], 502); } $response = $response->getBody()->getContents(); echo $response; } public function removeM(Request $request) { if (Auth::check() === false) { Auth::logout(); return redirect()->route('login'); } $ids = array_filter(array_map('intval', (array) $request->fls)); if(!$ids){ return response()->json(['success' => false], 422); } $serverData = DB::table('sites_servers')->where('id','=',session('serverID'))->get()->first(); /** * One scoped query instead of one per id. The old loop dereferenced the * row without checking it, so an id from another site was a fatal. */ $files = DB::connection('mysql_site_' . session('serverID'))->table('files_editor') ->where('site_id', '=', session('siteID'))->whereIn('id', $ids)->get(); if(!$files->count()){ return response()->json(['success' => false], 404); } $removedIds = $files->pluck('id')->all(); $do = $files->pluck('source')->filter()->values()->all(); DB::connection('mysql_site_' . session('serverID'))->table('files_editor') ->where('site_id', '=', session('siteID'))->whereIn('id', $removedIds)->delete(); UserLog::write('media.delete.bulk', [ 'entity' => 'media', 'description' => count($removedIds) . ' arquivos: ' . implode(',', array_slice($removedIds, 0, 40)) . (count($removedIds) > 40 ? '...' : ''), ]); $client = new Client(); try { $response = $client->request("POST", 'https://'.$serverData->name.'/_apiBrasUpload/bras_beRmvMultiple.php', [ 'form_params' => [ 'chnk' => 'E45DS87A6', 'fls' => $do ], ]); } catch (\Throwable $e) { // the rows are already gone, so a failure here only leaves files on disk Log::warning('media files not removed', ['site_id' => session('siteID'), 'error' => $e->getMessage()]); } return response()->json(['success' => true]); } public function setPos(Request $request,$type = null,$albid = null) { $types = array('videos','featured','albums_photos','album'); if(!in_array($type,$types)){ return false; } $idD = explode(",", $request->o); if($type == 'albums_photos'){ $conta = 0; while($idD[$conta]){ DB::connection('mysql_site_' . session('serverID'))->table('albums_photos')->where('album_id','=',$albid) ->where('id','=',$idD[$conta]) ->update([ 'ord' => $conta ]); $conta++; } }else{ $arrTable = array('videos' => 'videos','featured' => 'featured','album' => 'albums'); $nameTable = $arrTable[$type]; $cont = 0; while($idD[$cont]){ DB::connection('mysql_site_' . session('serverID'))->table($nameTable)->where('site_id', '=', session('siteID'))->where('id','=',$idD[$cont]) ->update([ 'ord' => $cont ]); $cont++; } } return true; } public function config() { if (Auth::check() === false) { Auth::logout(); return redirect()->route('login'); } $userLogged = User::where('id', '=', Auth::id())->get()->first(); $allNotifications = DB::table('notifications')->orderBy('id', 'desc')->limit('3')->get(); $siteData = SiteContext::current(); $settingData = DB::connection('mysql_site_' . session('serverID'))->table('settings')->where('site_id', '=', session('siteID'))->get()->first(); return view('site.configs', ['userLogged' => $userLogged , 'allNotifications' => $allNotifications, 'topHref' => 'site', 'siteData' => $siteData, 'settingData' => $settingData]); } public function updConf(Request $request) { if (Auth::check() === false) { Auth::logout(); return redirect()->route('login'); } $siteData = SiteContext::current(); /** * FILTER_SANITIZE_STRING is deprecated since 8.1 and gone in PHP 9. It * also encoded quotes into entities, which Blade then escaped again, so * an apostrophe in the site title rendered as ' on the page. */ $limpar = fn ($valor) => trim(strip_tags((string) $valor)); $flag = fn ($valor) => $valor == '1' ? '1' : '0'; $dadosConfig = [ 'title' => $limpar($request->setting_title), 'footer' => $limpar($request->setting_footer), 'description' => $limpar($request->setting_description), 'keywords' => $limpar($request->setting_keywords), 'analytics' => $limpar($request->setting_analytics), 'adsense' => $limpar($request->setting_adsense), 'ads' => $limpar($request->setting_ads), 'poll_type' => $flag($request->setting_poll_type), 'setting_notify' => $flag($request->setting_notify), 'message_approve' => $flag($request->setting_message_approve), 'comments_approve' => $flag($request->setting_comments_approve), 'player_music' => $flag($request->setting_player_music), 'player_auto' => $flag($request->setting_player_auto), 'metadata_cover' => $flag($request->setting_metadata_cover), ]; /** * The sidebar advertising block only renders for theme 01, so on every * other theme these keys are absent from the request. Writing them * anyway wiped a stored side_pages list that the customer would get * back the moment they switched themes. */ if ($request->has('side')) { $paginas = array_filter((array) $request->input('side_pages', []), 'is_scalar'); $dadosConfig['side'] = $flag($request->side); $dadosConfig['side_pages'] = $paginas ? implode(',', $paginas) : null; } DB::connection('mysql_site_' . session('serverID'))->table('settings') ->where('site_id', '=', session('siteID'))->update($dadosConfig); $dadosSite = [ 'maintenance' => $flag($request->site_maintenance), 'maintenance_msg' => $limpar($request->site_maintenance_msg), 'redirect' => $flag($request->site_redirect), 'privacity' => $flag($request->site_privacity), 'stat_current' => max(0, (int) $request->site_stat_current), 'stat_views' => (!$request->site_stat_views || $request->site_stat_views < 0 ? $siteData->stat_views : $request->site_stat_views), ]; // the field is not on the form, writing it would silently reset it if ($request->has('site_privacity_link')) { $dadosSite['privacity_link'] = $flag($request->site_privacity_link); } DB::connection('mysql_site_' . session('serverID'))->table('sites')->where('id', '=', session('siteID'))->update($dadosSite); UserLog::write('settings.update', ['entity' => 'settings']); UserLog::write('settings.update', ['entity' => 'settings']); return redirect()->route('site.config.r')->with('success', true); } public function hotsite() { if (Auth::check() === false) { Auth::logout(); return redirect()->route('login'); } $userLogged = User::where('id', '=', Auth::id())->get()->first(); $allNotifications = DB::table('notifications')->orderBy('id', 'desc')->limit('3')->get(); $siteData = SiteContext::current(); $settingData = DB::connection('mysql_site_' . session('serverID'))->table('settings')->where('site_id', '=', session('siteID'))->get()->first(); return view('site.hotsite', ['userLogged' => $userLogged , 'allNotifications' => $allNotifications, 'topHref' => 'site', 'siteData' => $siteData, 'settingData' => $settingData]); } public function sitemap() { if (Auth::check() === false) { Auth::logout(); return redirect()->route('login'); } $userLogged = User::where('id', '=', Auth::id())->get()->first(); $allNotifications = DB::table('notifications')->orderBy('id', 'desc')->limit('3')->get(); $siteData = SiteContext::current(); return view('site.sitemap', ['userLogged' => $userLogged , 'allNotifications' => $allNotifications, 'topHref' => 'site', 'siteData' => $siteData]); } }