added not subscribed page, added premium inbox
This commit is contained in:
@@ -49,6 +49,14 @@ class AppController extends Controller
|
||||
}
|
||||
}
|
||||
|
||||
public function switchP($email) {
|
||||
Premium::setEmailP($email);
|
||||
if (json_decode(config('app.settings.configuration_settings'))->disable_mailbox_slug) {
|
||||
return redirect()->route('dashboard');
|
||||
}
|
||||
return redirect()->route('dashboard.premium');
|
||||
}
|
||||
|
||||
public function deleteP($email = null) {
|
||||
if ($email) {
|
||||
$emails = Premium::getEmails();
|
||||
|
||||
@@ -2,12 +2,14 @@
|
||||
|
||||
namespace App\Livewire\Dashboard;
|
||||
|
||||
use App\Models\UsageLog;
|
||||
use Illuminate\Http\Request;
|
||||
use Livewire\Component;
|
||||
|
||||
class Dashboard extends Component
|
||||
{
|
||||
public $message;
|
||||
public $usageLog;
|
||||
public $subscription;
|
||||
public $plans;
|
||||
|
||||
@@ -61,7 +63,11 @@ class Dashboard extends Component
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$usageLog = UsageLog::where('user_id', auth()->user()->id)->first();
|
||||
$this->usageLog = [
|
||||
'emails_created_count' => $usageLog->emails_created_count ?? 0,
|
||||
'emails_received_count' => $usageLog->emails_received_count ?? 0,
|
||||
];
|
||||
}
|
||||
|
||||
public function render()
|
||||
|
||||
@@ -5,15 +5,18 @@ namespace App\Livewire\Dashboard\Mailbox;
|
||||
use App\ColorPicker;
|
||||
use App\Models\Log;
|
||||
use App\Models\Premium;
|
||||
use App\Models\PremiumEmail;
|
||||
use App\Models\UsageLog;
|
||||
use Artisan;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Cookie;
|
||||
use Livewire\Component;
|
||||
use Session;
|
||||
|
||||
class Inbox extends Component
|
||||
{
|
||||
use ColorPicker;
|
||||
|
||||
public $messages = [];
|
||||
public $deleted = [];
|
||||
public $error = '';
|
||||
@@ -24,8 +27,11 @@ class Inbox extends Component
|
||||
public $messageId;
|
||||
public $list = false;
|
||||
public $emails;
|
||||
public $mailboxHistory;
|
||||
public $emailsHistory;
|
||||
public $username, $domain, $domains, $action;
|
||||
public $email_limit = 20;
|
||||
private $isSubscribed;
|
||||
|
||||
protected $listeners = ['updateEmail' => 'syncEmail', 'getEmail' => 'generateEmail', 'fetchMessages' => 'fetch', 'setMessageId' => 'setMessageId'];
|
||||
|
||||
@@ -38,8 +44,11 @@ class Inbox extends Component
|
||||
$this->initial = false;
|
||||
$this->checkMultipleEmails();
|
||||
$this->validateDomainInEmail();
|
||||
$this->emailsHistory = array_reverse(PremiumEmail::parseEmail(\auth()->user()->id)['data']) ?? [];
|
||||
|
||||
if(auth()->user()->subscribedToProduct(config('app.plans')[0]['product_id'])) {
|
||||
$subscriptionCheck = auth()->user()->subscribedToProduct(config('app.plans')[0]['product_id']);
|
||||
Session::put('isSubscribed', $subscriptionCheck);
|
||||
if($subscriptionCheck) {
|
||||
try {
|
||||
$result = auth()->user()->subscriptions()->where(['stripe_status' => 'active'])->orderByDesc('updated_at')->first();
|
||||
$userPriceID = $result['items'][0]['stripe_price'];
|
||||
@@ -57,6 +66,9 @@ class Inbox extends Component
|
||||
\Log::error($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
$mailboxHistory = UsageLog::where(['user_id' => auth()->user()->id])->first();
|
||||
$this->mailboxHistory = $mailboxHistory->emails_created_history ?? [];
|
||||
}
|
||||
|
||||
private function checkMultipleEmails(): void
|
||||
@@ -73,7 +85,22 @@ class Inbox extends Component
|
||||
|
||||
public function switchEmail($email)
|
||||
{
|
||||
return redirect()->route('switch', ['email' => $email]);
|
||||
try {
|
||||
if ($email != null) {
|
||||
$data = explode('@', $email);
|
||||
if (isset($data[1])) {
|
||||
$domain = $data[1];
|
||||
$domains = json_decode(config('app.settings.configuration_settings'))->premium_domains ?? [];
|
||||
if (!in_array($domain, $domains)) {
|
||||
return $this->showAlert('error', __('This mailbox can not be recovered.'));
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (\Exception $exception) {
|
||||
\Log::error($exception->getMessage());
|
||||
}
|
||||
|
||||
return redirect()->route('switchP', ['email' => $email]);
|
||||
}
|
||||
|
||||
public function syncEmail(): void
|
||||
@@ -183,19 +210,25 @@ class Inbox extends Component
|
||||
|
||||
private function validateDomainInEmail(): void
|
||||
{
|
||||
$data = explode('@', $this->email);
|
||||
if (isset($data[1])) {
|
||||
$domain = $data[1];
|
||||
$domains = json_decode(config('app.settings.configuration_settings'))->premium_domains ?? [];
|
||||
if (!in_array($domain, $domains)) {
|
||||
$key = array_search($this->email, $this->emails);
|
||||
Premium::removeEmail($this->email);
|
||||
if ($key == 0 && count($this->emails) == 1 && json_decode(config('app.settings.configuration_settings'))->after_last_email_delete == 'redirect_to_homepage') {
|
||||
redirect()->route('dashboard.premium');
|
||||
} else {
|
||||
redirect()->route('dashboard.premium');
|
||||
try {
|
||||
if ($this->email != null) {
|
||||
$data = explode('@', $this->email);
|
||||
if (isset($data[1])) {
|
||||
$domain = $data[1];
|
||||
$domains = json_decode(config('app.settings.configuration_settings'))->premium_domains ?? [];
|
||||
if (!in_array($domain, $domains)) {
|
||||
$key = array_search($this->email, $this->emails);
|
||||
Premium::removeEmail($this->email);
|
||||
if ($key == 0 && count($this->emails) == 1 && json_decode(config('app.settings.configuration_settings'))->after_last_email_delete == 'redirect_to_homepage') {
|
||||
redirect()->route('dashboard.premium');
|
||||
} else {
|
||||
redirect()->route('dashboard.premium');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (\Exception $exception) {
|
||||
\Log::error($exception->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -241,6 +274,15 @@ class Inbox extends Component
|
||||
$this->dispatch('showNewMailNotification', $notification);
|
||||
}
|
||||
Premium::incrementMessagesStats(count($notifications));
|
||||
|
||||
if ($this->email != null && count($this->messages) > 0) {
|
||||
foreach ($this->messages as $message) {
|
||||
PremiumEmail::createEmail($message, $this->email);
|
||||
}
|
||||
}
|
||||
|
||||
$this->emailsHistory = array_reverse(PremiumEmail::parseEmail(\auth()->user()->id)['data']) ?? [];
|
||||
|
||||
} catch (\Exception $e) {
|
||||
if (Auth::check() && Auth::user()->level == 9) {
|
||||
$this->error = $e->getMessage();
|
||||
@@ -252,6 +294,17 @@ class Inbox extends Component
|
||||
$this->initial = true;
|
||||
}
|
||||
|
||||
public function processQueue(): void
|
||||
{
|
||||
try {
|
||||
Artisan::call('queue:work', [
|
||||
'--once' => true,
|
||||
]);
|
||||
} catch (\Exception $exception) {
|
||||
\Log::error($exception->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public function delete($messageId) {
|
||||
|
||||
try {
|
||||
@@ -274,7 +327,11 @@ class Inbox extends Component
|
||||
|
||||
public function render()
|
||||
{
|
||||
return view('livewire.dashboard.mailbox.inbox')->layout('components.layouts.dashboard');
|
||||
if (Session::get('isSubscribed')) {
|
||||
return view('livewire.dashboard.mailbox.inbox')->layout('components.layouts.dashboard');
|
||||
} else {
|
||||
return view('livewire.dashboard.not-subscribed')->layout('components.layouts.dashboard');
|
||||
}
|
||||
}
|
||||
|
||||
private function rrmdir($dir): void
|
||||
|
||||
13
app/Livewire/Dashboard/NotSubscribed.php
Normal file
13
app/Livewire/Dashboard/NotSubscribed.php
Normal file
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace App\Livewire\Dashboard;
|
||||
|
||||
use Livewire\Component;
|
||||
|
||||
class NotSubscribed extends Component
|
||||
{
|
||||
public function render()
|
||||
{
|
||||
return view('livewire.dashboard.not-subscribed')->layout('components.layouts.dashboard');
|
||||
}
|
||||
}
|
||||
@@ -35,6 +35,12 @@ class Premium extends Model
|
||||
|
||||
public static function fetchMessages($email, $type = 'to', $deleted = []): array
|
||||
{
|
||||
if ($email == null) {
|
||||
return [
|
||||
"data" => [],
|
||||
"notifications" => []
|
||||
];
|
||||
}
|
||||
$allowed = explode(',', 'doc,docx,xls,xlsx,ppt,pptx,xps,pdf,dxf,ai,psd,eps,ps,svg,ttf,zip,rar,tar,gzip,mp3,mpeg,wav,ogg,jpeg,jpg,png,gif,bmp,tif,webm,mpeg4,3gpp,mov,avi,mpegs,wmv,flx,txt');
|
||||
$connection = self::connectMailBox();
|
||||
|
||||
@@ -91,6 +97,7 @@ class Premium extends Model
|
||||
$obj['date'] = $date->format(json_decode(config('app.settings.configuration_settings'))->date_format ?? 'd M Y h:i A');
|
||||
$obj['datediff'] = $datediff->diffForHumans();
|
||||
$obj['id'] = $message->getNumber();
|
||||
$obj['size'] = $message->getSize();
|
||||
$obj['content'] = $content;
|
||||
$obj['contentText'] = $contentText;
|
||||
$obj['attachments'] = [];
|
||||
@@ -191,6 +198,15 @@ class Premium extends Model
|
||||
Cookie::queue('email', $email, 43800);
|
||||
}
|
||||
}
|
||||
|
||||
public static function setEmailP($email): void
|
||||
{
|
||||
$usageLogs = UsageLog::where(['user_id' => auth()->user()->id])->first();
|
||||
$emails = $usageLogs->emails_created_history;
|
||||
if (is_array($emails) && in_array($email, $emails)) {
|
||||
Cookie::queue('email', $email, 43800);
|
||||
}
|
||||
}
|
||||
public static function removeEmail($email): void
|
||||
{
|
||||
$emails = self::getEmails();
|
||||
@@ -287,14 +303,14 @@ class Premium extends Model
|
||||
if ($domain == "gmail.com") {
|
||||
$rd = mt_rand(0,1);
|
||||
if ($rd == 0) {
|
||||
$email = $zemail->generateRandomGmail();
|
||||
$email = $zemail->generateRandomGmail(false);
|
||||
} else {
|
||||
$email = $zemail->getRandomGmailUser().'+'.$zemail->generateRandomUsername().'@gmail.com';
|
||||
}
|
||||
} elseif ($domain == "googlemail.com") {
|
||||
$rd = mt_rand(0,1);
|
||||
if ($rd == 0) {
|
||||
$email = $zemail->generateRandomGmail();
|
||||
$email = $zemail->generateRandomGmail(false);
|
||||
} else {
|
||||
$email = $zemail->getRandomGmailUser().'+'.$zemail->generateRandomUsername().'@googlemail.com';
|
||||
}
|
||||
|
||||
160
app/Models/PremiumEmail.php
Normal file
160
app/Models/PremiumEmail.php
Normal file
@@ -0,0 +1,160 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use App\ColorPicker;
|
||||
use Carbon\Carbon;
|
||||
use Carbon\CarbonImmutable;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
|
||||
class PremiumEmail extends Model
|
||||
{
|
||||
use ColorPicker;
|
||||
|
||||
protected $fillable = [
|
||||
'user_id',
|
||||
'message_id',
|
||||
'subject',
|
||||
'from_name',
|
||||
'from_email',
|
||||
'to',
|
||||
'cc',
|
||||
'bcc',
|
||||
'timestamp',
|
||||
'body_text',
|
||||
'body_html',
|
||||
'is_seen',
|
||||
'is_flagged',
|
||||
'size',
|
||||
'mailbox',
|
||||
'raw_headers',
|
||||
'raw_body',
|
||||
'attachments',
|
||||
];
|
||||
|
||||
protected $casts = [
|
||||
'to' => 'array',
|
||||
'cc' => 'array',
|
||||
'bcc' => 'array',
|
||||
'attachments' => 'array',
|
||||
'timestamp' => 'datetime'
|
||||
];
|
||||
|
||||
public static function createEmail($message, $email): void
|
||||
{
|
||||
$initialData = $message;
|
||||
$utcTime = CarbonImmutable::instance($message['timestamp'])->setTimezone('UTC')->toDateTimeString();
|
||||
$messageId = Carbon::parse($utcTime)->format('Ymd').$initialData['id'];
|
||||
$userId = \auth()->user()->id;
|
||||
$exists = PremiumEmail::where('user_id', $userId)->where('message_id', $messageId)->exists();
|
||||
|
||||
$data = [
|
||||
'user_id' => $userId,
|
||||
'message_id' => $messageId,
|
||||
'subject' => $initialData['subject'],
|
||||
'from_name' => $initialData['sender_name'],
|
||||
'from_email' => $initialData['sender_email'],
|
||||
'to' => ["$email"],
|
||||
'cc' => [],
|
||||
'bcc' => [],
|
||||
'timestamp' => $utcTime,
|
||||
'body_text' => $initialData['contentText'],
|
||||
'body_html' => $initialData['content'],
|
||||
'is_seen' => true,
|
||||
'is_flagged' => false,
|
||||
'size' => $initialData['size'],
|
||||
'mailbox' => 'INBOX',
|
||||
'raw_headers' => null,
|
||||
'raw_body' => null,
|
||||
'attachments' => $initialData['attachments'],
|
||||
];
|
||||
|
||||
if (!$exists) {
|
||||
PremiumEmail::create($data);
|
||||
}
|
||||
}
|
||||
|
||||
public static function fetchEmailFromDB($userId) {
|
||||
|
||||
$validator = Validator::make(['user_id' => $userId], [
|
||||
'user_id' => 'required|integer'
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
return [];
|
||||
}
|
||||
return self::whereJsonContains('user_id', $userId)->orderBy('timestamp', 'desc')->get();
|
||||
}
|
||||
|
||||
public static function parseEmail($userId, $deleted = []): array
|
||||
{
|
||||
$messages = self::fetchEmailFromDB($userId);
|
||||
$limit = 50;
|
||||
$count = 1;
|
||||
$response = [
|
||||
'data' => [],
|
||||
'notifications' => []
|
||||
];
|
||||
|
||||
foreach ($messages as $message) {
|
||||
|
||||
if (in_array($message['message_id'], $deleted)) {
|
||||
// If it exists, delete the matching record from the 'emails' table
|
||||
Email::where('message_id', $message['message_id'])->delete();
|
||||
continue;
|
||||
}
|
||||
|
||||
$blocked = false;
|
||||
|
||||
$timestamp = $message['timestamp'];
|
||||
$carbonTimestamp = Carbon::parse($timestamp, 'UTC');
|
||||
$obj = [];
|
||||
$obj['subject'] = $message['subject'];
|
||||
$obj['to'] = $message['to'];
|
||||
$obj['sender_name'] = $message['from_name'];
|
||||
$obj['sender_email'] = $message['from_email'];
|
||||
$obj['timestamp'] = $message['timestamp'];
|
||||
$obj['date'] = $carbonTimestamp->format('d M Y h:i A');
|
||||
$obj['datediff'] = $carbonTimestamp->diffForHumans(Carbon::now('UTC'));
|
||||
$obj['id'] = $message['message_id'];
|
||||
$obj['content'] = $message['body_html'];
|
||||
$obj['contentText'] = $message['body_text'];
|
||||
$obj['attachments'] = [];
|
||||
$obj['is_seen'] = $message['is_seen'];
|
||||
$obj['sender_photo'] = self::chooseColor(strtoupper(substr($message['from_name'] ?: $message['from_email'], 0, 1) ));
|
||||
|
||||
|
||||
$domain = explode('@', $obj['sender_email'])[1];
|
||||
$blocked = in_array($domain, json_decode(config('app.settings.configuration_settings'))->blocked_domains);
|
||||
if ($blocked) {
|
||||
$obj['subject'] = __('Blocked');
|
||||
$obj['content'] = __('Emails from') . ' ' . $domain . ' ' . __('are blocked by Admin');
|
||||
$obj['contentText'] = __('Emails from') . ' ' . $domain . ' ' . __('are blocked by Admin');
|
||||
}
|
||||
|
||||
if (count($message['attachments']) > 0 && !$blocked) {
|
||||
$obj['attachments'] = $message['attachments'];
|
||||
|
||||
}
|
||||
|
||||
$response['data'][] = $obj;
|
||||
if (!$message['is_seen']) {
|
||||
$response['notifications'][] = [
|
||||
'subject' => $obj['subject'],
|
||||
'sender_name' => $obj['sender_name'],
|
||||
'sender_email' => $obj['sender_email']
|
||||
];
|
||||
if (config('app.zemail_log')) {
|
||||
file_put_contents(storage_path('logs/zemail.csv'), request()->ip() . "," . date("Y-m-d h:i:s a") . "," . $obj['sender_email'] . "," . $email . PHP_EOL, FILE_APPEND);
|
||||
}
|
||||
}
|
||||
PremiumEmail::where('message_id', $message['message_id'])->update(['is_seen' => true]);
|
||||
if (++$count > $limit) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return $response;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user