Antoine Le Gonidec
aa9c1624a1
The link is set only for Customers that are linked to exactly one Mailbox, through the Conversations they are linked to.
107 lines
2.5 KiB
PHP
107 lines
2.5 KiB
PHP
<?php
|
|
/*
|
|
SPDX-License-Identifier: AGPL-3.0-only
|
|
SPDX-FileCopyrightText: © 2024 Millions Missing FRANCE <info@millionsmissing.fr>
|
|
*/
|
|
|
|
namespace MillionsMissingFrance\FreescoutRestrictedCustomers;
|
|
|
|
use App\Email;
|
|
use App\CustomerChannel;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Support\Facades\Hash;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Watson\Rememberable\Rememberable;
|
|
use MillionsMissingFrance\FreescoutRestrictedCustomers\Mailbox;
|
|
use App\Customer as BaseCustomer;
|
|
|
|
class Customer extends BaseCustomer {
|
|
/**
|
|
* Attributes fillable using fill() method.
|
|
*
|
|
* @var [type]
|
|
*/
|
|
protected $fillable = [
|
|
// Default list, imported from BaseCustomer.
|
|
'first_name',
|
|
'last_name',
|
|
'company',
|
|
'job_title',
|
|
'address',
|
|
'city',
|
|
'state',
|
|
'zip',
|
|
'country',
|
|
'photo_url',
|
|
'age',
|
|
'gender',
|
|
'notes',
|
|
'channel',
|
|
'channel_id',
|
|
'social_profiles',
|
|
// Addition specific to this package.
|
|
'mailbox_id',
|
|
];
|
|
|
|
/**
|
|
* Get the Mailbox that is allowed to access this Customer information.
|
|
*/
|
|
public function mailbox() {
|
|
return $this->belongsTo(Mailbox::class);
|
|
}
|
|
|
|
/**
|
|
* Set empty fields.
|
|
*/
|
|
public function setData($data, $replace_data = true, $save = false) {
|
|
// Set the Mailbox this Customer should be linked to.
|
|
// TODO: Throw an error if the Mailbox is not set.
|
|
if ( isset($data['mailbox']) ) {
|
|
// TODO: Check that the current user is allowed to access this Mailbox.
|
|
$data['mailbox_id'] = $data['mailbox'];
|
|
unset($data['mailbox']);
|
|
}
|
|
|
|
return parent::setData($data, $replace_data, $save);
|
|
}
|
|
|
|
/**
|
|
* Only return a Customer instance if it is available to the current User.
|
|
*
|
|
* @param int $id
|
|
* @param array $columns
|
|
* @return mixed|static
|
|
*/
|
|
public static function find($id, $columns = ['*']) {
|
|
// Get the list of Mailboxes the current User has access to.
|
|
$user = auth()->user();
|
|
$mailboxes = $user->mailboxesIdsCanView();
|
|
|
|
$customer = self
|
|
::where('id', '=', $id)
|
|
->whereIn('mailbox_id', $mailboxes)
|
|
->first($columns);
|
|
}
|
|
|
|
/**
|
|
* Get the Mailboxes this Customer is linked to through Conversations.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function mailboxesThroughConversations() {
|
|
return $this
|
|
->conversations
|
|
->pluck('mailbox');
|
|
}
|
|
|
|
/**
|
|
* If this Customer is linked to a single Mailbox through Conversations, link it to it.
|
|
*/
|
|
public function linkToMailboxThroughConversations() {
|
|
$mailboxes = $this->mailboxesThroughConversations();
|
|
if ( $mailboxes->count() == 1 ) {
|
|
$this->mailbox_id = $mailboxes->first()->id;
|
|
$this->save();
|
|
}
|
|
}
|
|
}
|