Files
aibuddytool/app/Http/Controllers/Front/FrontSubmitToolController.php
2023-11-29 21:16:13 +08:00

98 lines
4.0 KiB
PHP

<?php
namespace App\Http\Controllers\Front;
use App\Http\Controllers\Controller;
use App\Models\SubmitTool;
use App\Models\UrlToCrawl;
use App\Notifications\AiToolSubmitted;
use Illuminate\Http\Request;
use Notification;
class FrontSubmitToolController extends Controller
{
public function index(Request $request)
{
$submitted_tool_count = SubmitTool::whereIn('status', ['initial', 'queued_for_crawl', 'crawled'])->count();
$max_submissions = 2000;
$submissions_left = $max_submissions - $submitted_tool_count;
return view('front.submit_tool_free', compact('submitted_tool_count', 'submissions_left', 'max_submissions'));
}
public function post(Request $request)
{
$submitted_tool_count = SubmitTool::whereIn('status', ['initial', 'queued_for_crawl', 'crawled'])->count();
$max_submissions = 2000;
$submissions_left = $max_submissions - $submitted_tool_count;
$submited_url = rtrim(trim($request->input('submitted_url')), '/\\');
if ($submissions_left <= 0) {
return redirect()->back()->withInput()->with('error', (object) ['timeout' => 5000, 'message' => 'Unfortunately, all submission slots have been filled. Please check try again later to see if there are any slots released from rejected submissions.']);
}
if (filter_var($submited_url, FILTER_VALIDATE_URL) === false) {
return redirect()->back()->withInput()->with('error', (object) ['timeout' => 5000, 'message' => 'Submitted URL is in invalid URL format. Please check your inputs and try again.']);
}
$submit_tool = SubmitTool::where('submitted_url', $submited_url)->first();
if (! is_null($submit_tool)) {
return redirect()->back()->withInput()->with('error', (object) ['timeout' => 5000, 'message' => 'You have submitted this URL before. Submission ignored.']);
}
$ignore_url_keywords = ['play.google.com', 'apps.apple.com', 'https://chromewebstore.google.com'];
$is_store_url = false;
foreach ($ignore_url_keywords as $keyword) {
if (str_contains($submited_url, $keyword)) {
$is_store_url = true;
break;
}
}
$url_to_crawl = null;
if ($is_store_url) {
$url_to_crawl = UrlToCrawl::where('url', $submited_url)->first();
} else {
$domain = get_domain_from_url($submited_url);
$url_to_crawl = UrlToCrawl::where('domain', $domain)->first();
}
if (! is_null($url_to_crawl)) {
return redirect()->back()->withInput()->with('success', (object) ['timeout' => 5000, 'message' => 'Our AI crawler has already identified & pre-approved your submission. It has been scheduled for live submission and should appear in our pages soon.']);
}
$submit_tool = new SubmitTool;
$submit_tool->submitted_url = $request->input('submitted_url');
$submit_tool->email = $request->input('email');
$submit_tool->social = $request->input('social');
$submit_tool->social_type = $request->input('social_type');
$submit_tool->source_type = $request->input('source_type');
$submit_tool->source = $request->input('source');
$submit_tool->comments = $request->input('comments');
if ($submit_tool->save()) {
$submitted_tool_count = SubmitTool::whereIn('status', ['initial', 'queued_for_crawl', 'crawled'])->count();
$telegram_ids = get_notification_user_ids();
foreach ($telegram_ids as $telegram_id) {
Notification::route(get_notification_channel(), $telegram_id)->notify(new AiToolSubmitted($submit_tool));
}
return redirect()->back()->withInput()->with('success', (object) ['timeout' => 5000, 'message' => 'AI tool submittted successfully! You are #'.$submitted_tool_count.' in submission list.']);
}
return redirect()->back()->withInput()->with('error', (object) ['timeout' => 5000, 'message' => 'Something went wrong. Please try again later.']);
}
}