1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-11-13 22:54:25 +01:00
invoiceninja/app/Models/Invitation.php

182 lines
4.2 KiB
PHP
Raw Normal View History

2017-01-30 20:40:43 +01:00
<?php
namespace App\Models;
2015-03-16 22:45:25 +01:00
2015-10-28 20:22:07 +01:00
use Carbon;
2015-03-31 11:38:24 +02:00
use Illuminate\Database\Eloquent\SoftDeletes;
2017-01-30 20:40:43 +01:00
use Utils;
2017-04-30 21:18:17 +02:00
use App\Models\LookupInvitation;
2015-03-31 11:38:24 +02:00
/**
2017-01-30 20:40:43 +01:00
* Class Invitation.
*/
2015-03-16 22:45:25 +01:00
class Invitation extends EntityModel
{
2015-03-31 11:38:24 +02:00
use SoftDeletes;
/**
* @var array
*/
2015-03-31 11:38:24 +02:00
protected $dates = ['deleted_at'];
2016-08-08 22:47:09 +02:00
/**
* @return mixed
*/
public function getEntityType()
{
return ENTITY_INVITATION;
}
/**
* @return mixed
*/
2015-03-16 22:45:25 +01:00
public function invoice()
{
2015-04-16 21:57:12 +02:00
return $this->belongsTo('App\Models\Invoice')->withTrashed();
2015-03-16 22:45:25 +01:00
}
/**
* @return mixed
*/
2015-03-16 22:45:25 +01:00
public function contact()
{
2015-03-31 11:38:24 +02:00
return $this->belongsTo('App\Models\Contact')->withTrashed();
2015-03-16 22:45:25 +01:00
}
/**
* @return mixed
*/
2015-03-16 22:45:25 +01:00
public function user()
{
2015-03-23 07:52:01 +01:00
return $this->belongsTo('App\Models\User')->withTrashed();
2015-03-16 22:45:25 +01:00
}
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
2015-03-16 22:45:25 +01:00
public function account()
{
2015-03-31 11:38:24 +02:00
return $this->belongsTo('App\Models\Account');
2015-03-16 22:45:25 +01:00
}
// If we're getting the link for PhantomJS to generate the PDF
// we need to make sure it's served from our site
2017-01-30 20:40:43 +01:00
/**
* @param string $type
2017-01-30 20:40:43 +01:00
* @param bool $forceOnsite
*
* @return string
*/
public function getLink($type = 'view', $forceOnsite = false, $forcePlain = false)
2015-03-16 22:45:25 +01:00
{
2017-01-30 17:05:31 +01:00
if (! $this->account) {
2015-07-02 22:21:29 +02:00
$this->load('account');
}
2017-01-12 14:12:02 +01:00
$account = $this->account;
$iframe_url = $account->iframe_url;
2016-07-05 11:28:28 +02:00
$url = trim(SITE_URL, '/');
2016-05-15 22:16:08 +02:00
if (env('REQUIRE_HTTPS')) {
$url = str_replace('http://', 'https://', $url);
}
2017-01-12 14:12:02 +01:00
if ($account->hasFeature(FEATURE_CUSTOM_URL)) {
if (Utils::isNinjaProd()) {
2017-01-12 14:12:02 +01:00
$url = $account->present()->clientPortalLink();
}
2017-01-30 20:40:43 +01:00
if ($iframe_url && ! $forceOnsite) {
2016-03-24 08:14:27 +01:00
return "{$iframe_url}?{$this->invitation_key}";
} elseif ($this->account->subdomain && ! $forcePlain) {
2017-01-12 14:12:02 +01:00
$url = Utils::replaceSubdomain($url, $account->subdomain);
2015-10-13 09:11:44 +02:00
}
2015-04-28 22:13:52 +02:00
}
2016-05-15 22:16:08 +02:00
2015-12-02 14:26:06 +01:00
return "{$url}/{$type}/{$this->invitation_key}";
2015-03-16 22:45:25 +01:00
}
2015-07-02 22:21:29 +02:00
/**
* @return bool|string
*/
2015-10-11 16:41:09 +02:00
public function getStatus()
{
$hasValue = false;
$parts = [];
$statuses = $this->message_id ? ['sent', 'opened', 'viewed'] : ['sent', 'viewed'];
foreach ($statuses as $status) {
$field = "{$status}_date";
$date = '';
2015-10-18 12:37:04 +02:00
if ($this->$field && $this->field != '0000-00-00 00:00:00') {
2015-10-11 16:41:09 +02:00
$date = Utils::dateToString($this->$field);
$hasValue = true;
$parts[] = trans('texts.invitation_status_' . $status) . ': ' . $date;
}
2015-10-11 16:41:09 +02:00
}
return $hasValue ? implode($parts, '<br/>') : false;
}
/**
* @return mixed
*/
2015-07-02 22:21:29 +02:00
public function getName()
{
return $this->invitation_key;
}
2015-10-11 16:41:09 +02:00
/**
* @param null $messageId
*/
2015-10-29 15:42:05 +01:00
public function markSent($messageId = null)
{
$this->message_id = $messageId;
$this->email_error = null;
$this->sent_date = Carbon::now()->toDateTimeString();
$this->save();
}
public function isSent()
{
return $this->sent_date && $this->sent_date != '0000-00-00 00:00:00';
}
2015-10-28 20:22:07 +01:00
public function markViewed()
{
$invoice = $this->invoice;
$client = $invoice->client;
$this->viewed_date = Carbon::now()->toDateTimeString();
$this->save();
$invoice->markViewed();
$client->markLoggedIn();
}
2016-11-06 12:44:58 +01:00
public function signatureDiv()
{
2017-01-30 17:05:31 +01:00
if (! $this->signature_base64) {
2016-11-06 12:44:58 +01:00
return false;
}
return sprintf('<img src="data:image/svg+xml;base64,%s"></img><p/>%s: %s', $this->signature_base64, trans('texts.signed'), Utils::fromSqlDateTime($this->signature_date));
}
2015-03-16 22:45:25 +01:00
}
2017-04-30 21:18:17 +02:00
Invitation::creating(function ($invitation)
{
LookupInvitation::createNew($invitation->account->account_key, [
'invitation_key' => $invitation->invitation_key,
]);
});
2017-05-01 11:29:45 +02:00
Invitation::deleted(function ($invitation)
{
2017-05-10 12:02:20 +02:00
if ($invitation->forceDeleting) {
LookupInvitation::deleteWhere([
'invitation_key' => $invitation->invitation_key,
]);
}
2017-05-01 11:29:45 +02:00
});