Add (ai tool submission)

This commit is contained in:
2023-11-29 21:16:13 +08:00
parent 79326f74f1
commit 7ce1e93242
67 changed files with 686 additions and 474 deletions

View File

@@ -71,7 +71,7 @@ public function discover(Request $request, $category_slug = null)
$ai_tools = AiTool::when(! is_null($category), function ($query) use ($category) {
$query->where('category_id', $category->id);
})
->where('status','live')
->where('status', 'live')
->whereNotNull('screenshot_img')
->orderBy('updated_at', 'DESC')->paginate(6);

View File

@@ -16,9 +16,9 @@ public function index(Request $request)
{
$tools_count_rounded = round_to_nearest_base(Cached::tools_count());
$latest_ai_tools = AiTool::where('status','live')->whereNotNull('screenshot_img')->take(12)->orderBy('created_at', 'DESC')->get();
$latest_ai_tools = AiTool::where('status', 'live')->whereNotNull('screenshot_img')->take(12)->orderBy('created_at', 'DESC')->get();
return view('front.home', compact('latest_ai_tools','tools_count_rounded'));
return view('front.home', compact('latest_ai_tools', 'tools_count_rounded'));
}
public function terms(Request $request)

View File

@@ -0,0 +1,97 @@
<?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.']);
}
}

View File

@@ -13,7 +13,7 @@ class FrontToolController extends Controller
{
public function show(Request $request, $ai_tool_slug)
{
$ai_tool = AiTool::where('slug', $ai_tool_slug)->where('status','live')->first();
$ai_tool = AiTool::where('slug', $ai_tool_slug)->where('status', 'live')->first();
if (is_null($ai_tool)) {
return abort(404);
@@ -74,8 +74,8 @@ public function show(Request $request, $ai_tool_slug)
$faq_context = Context::create(FAQPage::class, $faqData);
SEOTools::setTitle($ai_tool->tool_name . ": ". $ai_tool->tagline, false);
SEOTools::setDescription(implode(" ",str_extract_sentences($ai_tool->summary, 2)));
SEOTools::setTitle($ai_tool->tool_name.': '.$ai_tool->tagline, false);
SEOTools::setDescription(implode(' ', str_extract_sentences($ai_tool->summary, 2)));
SEOTools::metatags();
SEOTools::twitter()->addImage($ai_tool->screenshot_img);
SEOTools::opengraph()->addImage($ai_tool->screenshot_img);