98 lines
4.0 KiB
PHP
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.']);
|
|
|
|
}
|
|
}
|