shell bypass 403

UnknownSec Shell


name : EloquentContactsRepository.php
<?php

namespace App\Repositories\Eloquent;

use App\Exceptions\GeneralException;
use App\Models\Campaigns;
use App\Models\ContactGroups;
use App\Models\Contacts;
use App\Models\ContactsCustomField;
use App\Repositories\Contracts\ContactsRepository;
use Exception;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
use libphonenumber\NumberParseException;
use libphonenumber\PhoneNumberUtil;
use Throwable;

class EloquentContactsRepository extends EloquentBaseRepository implements ContactsRepository
{
    /**
     * EloquentContactsRepository constructor.
     *
     * @param  ContactGroups  $contactGroups
     */
    public function __construct(ContactGroups $contactGroups)
    {
        parent::__construct($contactGroups);
    }

    /**
     * @param  array  $input
     *
     * @return ContactGroups
     *
     * @throws GeneralException
     */
    public function store(array $input): ContactGroups
    {
        /** @var ContactGroups $contactGroups */
        $contactGroups = $this->make(Arr::only($input, ['name']));

        if ( ! isset($input['send_welcome_sms'])) {
            $contactGroups->send_welcome_sms = false;
        }

        if ( ! isset($input['unsubscribe_notification'])) {
            $contactGroups->unsubscribe_notification = false;
        }

        if ( ! isset($input['send_keyword_message'])) {
            $contactGroups->send_keyword_message = false;
        }

        $contactGroups->status      = true;
        $contactGroups->customer_id = auth()->user()->id;

        if ( ! $this->save($contactGroups)) {
            throw new GeneralException(__('locale.exceptions.something_went_wrong'));
        }

        return $contactGroups;

    }

    /**
     * @param  ContactGroups  $contactGroups
     *
     * @return bool
     */
    private function save(ContactGroups $contactGroups): bool
    {
        if ( ! $contactGroups->save()) {
            return false;
        }

        return true;
    }

    /**
     * @param  ContactGroups  $contactGroups
     * @param  array  $input
     *
     * @return ContactGroups
     * @throws Exception|Throwable
     *
     * @throws Exception
     */
    public function update(ContactGroups $contactGroups, array $input): ContactGroups
    {
        if (isset($input['originator'])) {
            if ($input['originator'] == 'sender_id') {
                $sender_id = $input['sender_id'];
            } else {
                $sender_id = $input['phone_number'];
            }
            $input['sender_id'] = $sender_id;
        }

        if ( ! isset($input['send_welcome_sms'])) {
            $input['send_welcome_sms'] = false;
        }

        if ( ! isset($input['unsubscribe_notification'])) {
            $input['unsubscribe_notification'] = false;
        }

        if ( ! isset($input['send_keyword_message'])) {
            $input['send_keyword_message'] = false;
        }

        if ( ! $contactGroups->update($input)) {
            throw new GeneralException(__('locale.exceptions.something_went_wrong'));
        }

        return $contactGroups;
    }

    /**
     * @param  ContactGroups  $contactGroups
     *
     * @return bool|null
     * @throws Exception|Throwable
     *
     */
    public function destroy(ContactGroups $contactGroups): ?bool
    {
        if ( ! $contactGroups->delete()) {
            throw new GeneralException(__('locale.exceptions.something_went_wrong'));
        }

        return true;

    }

    /**
     * @param  array  $ids
     *
     * @return mixed
     * @throws Exception|Throwable
     *
     */
    public function batchDestroy(array $ids): bool
    {
        DB::transaction(function () use ($ids) {
            // This won't call eloquent events, change to destroy if needed
            if ($this->query()->whereIn('uid', $ids)->delete()) {
                return true;
            }

            throw new GeneralException(__('locale.exceptions.something_went_wrong'));
        });

        return true;

    }

    /**
     * @param  array  $ids
     *
     * @return mixed
     * @throws Exception|Throwable
     *
     */
    public function batchActive(array $ids): bool
    {
        DB::transaction(function () use ($ids) {
            if ($this->query()->whereIn('uid', $ids)
                    ->update(['status' => true])
            ) {
                return true;
            }

            throw new GeneralException(__('locale.exceptions.something_went_wrong'));
        });

        return true;
    }

    /**
     * @param  array  $ids
     *
     * @return mixed
     * @throws Exception|Throwable
     *
     */
    public function batchDisable(array $ids): bool
    {
        DB::transaction(function () use ($ids) {
            if ($this->query()->whereIn('uid', $ids)
                    ->update(['status' => false])
            ) {
                return true;
            }

            throw new GeneralException(__('locale.exceptions.something_went_wrong'));
        });

        return true;
    }


    /**
     * store new contact
     *
     * @param  ContactGroups  $contactGroups
     * @param  array  $input
     *
     * @return JsonResponse
     * @throws Throwable
     */
    public function storeContact(ContactGroups $contactGroups, array $input): JsonResponse
    {

        $phone = str_replace(['+', '(', ')', '-', ' '], '', $input['phone']);
        try {
            $phoneUtil         = PhoneNumberUtil::getInstance();
            $phoneNumberObject = $phoneUtil->parse('+'.$phone);

            if ($phoneUtil->isPossibleNumber($phoneNumberObject)) {
                $contact = Contacts::create([
                        'customer_id' => $contactGroups->customer_id,
                        'group_id'    => $contactGroups->id,
                        'phone'       => $phone,
                        'first_name'  => $input['first_name'],
                        'last_name'   => $input['last_name'],
                ]);

                if ($contact) {

                    $sendMessage = new EloquentCampaignRepository($campaign = new Campaigns());

                    if ($contactGroups->send_welcome_sms && $contactGroups->welcome_sms) {

                        $sendMessage->quickSend($campaign, [
                                'sender_id'      => $contactGroups->sender_id,
                                'sms_type'       => 'plain',
                                'message'        => $contactGroups->welcome_sms,
                                'recipient'      => $phoneNumberObject->getNationalNumber(),
                                'user_id'        => $contactGroups->customer_id,
                                'country_code'   => $phoneNumberObject->getCountryCode(),
                                'sending_server' => $contactGroups->sending_server,
                                'exist_c_code'   => 'yes',
                        ]);

                    }

                    if ($contactGroups->signup_sms) {
                        $sendMessage->quickSend($campaign, [
                                'sender_id'      => $contactGroups->sender_id,
                                'sms_type'       => 'plain',
                                'message'        => $contactGroups->signup_sms,
                                'recipient'      => $phoneNumberObject->getNationalNumber(),
                                'user_id'        => $contactGroups->customer_id,
                                'country_code'   => $phoneNumberObject->getCountryCode(),
                                'sending_server' => $contactGroups->sending_server,
                                'exist_c_code'   => 'yes',
                        ]);

                    }

                    $contactGroups->updateCache('SubscribersCount');

                    return response()->json([
                            'status'  => 'success',
                            'contact' => $contact,
                            'message' => __('locale.contacts.contact_successfully_added'),
                    ]);
                }

                return response()->json([
                        'status'  => 'error',
                        'message' => __('locale.exceptions.something_went_wrong'),
                ]);
            }

            return response()->json([
                    'status'  => 'error',
                    'message' => __('locale.customer.invalid_phone_number', ['phone' => $phone]),
            ]);
        } catch (NumberParseException $exception) {
            return response()->json([
                    'status'  => 'error',
                    'message' => $exception->getMessage(),
            ]);
        }

    }

    /**
     * update contact status
     *
     * @param  ContactGroups  $contactGroups
     * @param  array  $input
     *
     * @return bool
     */
    public function updateContactStatus(ContactGroups $contactGroups, array $input): bool
    {
        try {
            $contact = Contacts::where('group_id', $contactGroups->id)->where('uid', $input['id'])->first();

            if ($contact) {
                if ($contact->status == 'subscribe') {
                    $status = 'unsubscribe';
                } else {
                    $status = 'subscribe';
                }

                if ($contact->update(['status' => $status])) {
                    return true;
                }

                return false;
            }

            return false;

        } catch (ModelNotFoundException) {
            return false;
        }
    }

    /**
     * update single contact information
     *
     * @param  ContactGroups  $contactGroups
     * @param  array  $input
     *
     * @return bool
     */
    public function updateContact(ContactGroups $contactGroups, array $input): bool
    {
        try {
            $contact = Contacts::where('group_id', $contactGroups->id)->where('uid', $input['contact_id'])->first();

            if ($contact) {
                if (isset($input['custom']) && is_array($input['custom']) && count($input['custom']) > 0) {
                    ContactsCustomField::where('contact_id', $contact->id)->delete();
                    foreach ($input['custom'] as $value) {
                        $value['contact_id'] = $contact->id;
                        ContactsCustomField::create($value);
                    }
                }
                $data = array_except($input, ['custom', 'contact_id']);
                if ($contact->update($data)) {
                    return true;
                }

                return false;
            }

            return false;

        } catch (ModelNotFoundException) {
            return false;
        }
    }

    /**
     * delete single contact from group
     *
     * @param  ContactGroups  $contactGroups
     * @param  array  $id
     *
     * @return bool
     */
    public function contactDestroy(ContactGroups $contactGroups, array $id): bool
    {
        $contact = Contacts::where('group_id', $contactGroups->id)->where('uid', $id)->first();
        if ($contact) {

            $contact->delete();

            $contactGroups->updateCache('SubscribersCount');

            return true;
        }

        return false;
    }

    /**
     * bulk contacts subscribe
     *
     * @param  ContactGroups  $contactGroups
     * @param  array  $ids
     *
     * @return bool
     */
    public function batchContactSubscribe(ContactGroups $contactGroups, array $ids): bool
    {
        $status = Contacts::where('group_id', $contactGroups->id)->whereIn('uid', $ids)->update([
                'status' => 'subscribe',
        ]);

        if ($status) {
            return true;
        }

        return false;
    }

    /**
     * bulk contact unsubscribe
     *
     * @param  ContactGroups  $contactGroups
     * @param  array  $ids
     *
     * @return bool
     */
    public function batchContactUnsubscribe(ContactGroups $contactGroups, array $ids): bool
    {
        $status = Contacts::where('group_id', $contactGroups->id)->whereIn('uid', $ids)->update([
                'status' => 'unsubscribe',
        ]);

        if ($status) {
            return true;
        }

        return false;
    }

    /**
     * bulk copy from one group to another group
     *
     * @param  ContactGroups  $contactGroups
     * @param  array  $input
     *
     * @return bool
     */
    public function batchContactCopy(ContactGroups $contactGroups, array $input): bool
    {
        $existing_list = Contacts::where('group_id', $contactGroups->id)->whereIn('uid', $input['ids'])->cursor();
        foreach ($existing_list as $list) {
            $exist = Contacts::where('group_id', $input['target_group'])->where('phone', $list->phone)->first();
            if (! $exist){
                $new_list           = $list->replicate();
                $new_list->group_id = $input['target_group'];
                $new_list->save();
            }
        }

        $target_group = ContactGroups::find($input['target_group']);
        if ($target_group) {
            $target_group->updateCache('SubscribersCount');
        }

        return true;
    }

    /**
     * bulk move from one group to another group
     *
     * @param  ContactGroups  $contactGroups
     * @param  array  $input
     *
     * @return bool
     */
    public function batchContactMove(ContactGroups $contactGroups, array $input): bool
    {
        $existing_list = Contacts::where('group_id', $contactGroups->id)->whereIn('uid', $input['ids'])->update([
                'group_id' => $input['target_group'],
        ]);

        if ($existing_list) {
            $target_group = ContactGroups::find($input['target_group']);
            if ($target_group) {
                $target_group->updateCache('SubscribersCount');
            }
            $contactGroups->updateCache('SubscribersCount');

            return true;
        }

        return false;
    }

    /**
     * bulk contacts delete from group
     *
     * @param  ContactGroups  $contactGroups
     * @param  array  $ids
     *
     * @return bool
     */
    public function batchContactDestroy(ContactGroups $contactGroups, array $ids): bool
    {
        $status = Contacts::where('group_id', $contactGroups->id)->whereIn('uid', $ids)->delete();
        if ($status) {
            $contactGroups->updateCache('SubscribersCount');

            return true;
        }

        return false;
    }

}

© 2025 UnknownSec
afwwrfwafr45458465
Password