*/ 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') ->unique(); } /** * 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(); } } }