Normalise tagline/tearline/origin
All checks were successful
Create Docker Image / Build Docker Image (x86_64) (push) Successful in 39s
Create Docker Image / Build Docker Image (arm64) (push) Successful in 1m51s
Create Docker Image / Final Docker Image Manifest (push) Successful in 10s

This commit is contained in:
2024-06-03 19:08:40 +10:00
parent 1d354da6e3
commit 8fb3a21fcd
29 changed files with 313 additions and 88 deletions

View File

@@ -46,6 +46,27 @@ final class Echomail extends Model implements Packet
'rogue_path' => CollectionOrNull::class, // @deprecated?
];
public function __get($key)
{
switch ($key) {
case 'set_echoarea':
case 'set_fftn':
case 'set_path':
case 'set_pkt':
case 'set_recvtime':
case 'set_seenby':
case 'set_sender':
case 'set_tagline':
case 'set_tearline':
case 'set_origin':
return $this->set->get($key);
default:
return parent::__get($key);
}
}
public function __set($key,$value)
{
switch ($key) {
@@ -71,7 +92,7 @@ final class Echomail extends Model implements Packet
case 'set_pkt':
case 'set_recvtime':
case 'set_sender':
// @todo We'll normalise these values when saving the netmail
case 'set_tagline':
case 'set_tearline':
case 'set_origin':
@@ -101,6 +122,26 @@ final class Echomail extends Model implements Packet
static::creating(function($model) {
if (isset($model->errors) && $model->errors->count())
throw new \Exception('Cannot save, validation errors exist');
if ($model->set->has('set_tagline'))
$model->tagline_id = Tagline::firstOrCreate(['value'=>$model->set_tagline])->id;
if ($model->set->has('set_tearline'))
$model->tearline_id = Tearline::firstOrCreate(['value'=>$model->set_tearline])->id;
if ($model->set->has('set_origin')) {
// Make sure our origin contains our FTN
$m = [];
if ((preg_match('#^(.*)\s+\(([0-9]+:[0-9]+/[0-9]+.*)\)+\s*$#',$model->set_origin,$m))
&& (Address::findFTN($m[2])->id === $model->fftn_id))
$model->origin_id = Origin::firstOrCreate(['value'=>$m[1]])->id;
}
// If we can rebuild the message content, then we can do away with msg_src
if (md5($model->rebuildMessage()) === $model->msg_crc) {
Log::debug(sprintf('%s:- Pruning message source, since we can rebuild the message [%s]',self::LOGKEY,$model->msgid));
$model->msg_src = NULL;
}
});
// @todo if the message is updated with new SEEN-BY's from another route, we'll delete the pending export for systems (if there is one)
@@ -213,12 +254,6 @@ final class Echomail extends Model implements Packet
return $this->belongsTo(Echoarea::class);
}
public function fftn()
{
return $this->belongsTo(Address::class)
->withTrashed();
}
public function seenby()
{
return $this->belongsToMany(Address::class,'echomail_seenby')

View File

@@ -45,6 +45,27 @@ final class Netmail extends Model implements Packet
'sent_at' => 'datetime:Y-m-d H:i:s',
];
public function __get($key)
{
switch ($key) {
case 'set_fftn':
case 'set_tftn':
case 'set_path':
case 'set_pkt':
case 'set_recvtime':
case 'set_seenby':
case 'set_sender':
case 'set_tagline':
case 'set_tearline':
case 'set_origin':
return $this->set->get($key);
default:
return parent::__get($key);
}
}
public function __set($key,$value)
{
switch ($key) {
@@ -67,7 +88,7 @@ final class Netmail extends Model implements Packet
case 'set_pkt':
case 'set_recvtime':
case 'set_sender':
// @todo We'll normalise these values when saving the netmail
case 'set_tagline':
case 'set_tearline':
case 'set_origin':
@@ -94,6 +115,26 @@ final class Netmail extends Model implements Packet
static::creating(function($model) {
if (isset($model->errors) && $model->errors->count())
throw new \Exception('Cannot save, validation errors exist');
if ($model->set->has('set_tagline'))
$model->tagline_id = Tagline::firstOrCreate(['value'=>$model->set_tagline])->id;
if ($model->set->has('set_tearline'))
$model->tearline_id = Tearline::firstOrCreate(['value'=>$model->set_tearline])->id;
if ($model->set->has('set_origin')) {
// Make sure our origin contains our FTN
$m = [];
if ((preg_match('#^(.*)\s+\(([0-9]+:[0-9]+/[0-9]+.*)\)+\s*$#',$model->set_origin,$m))
&& (Address::findFTN($m[2])->id === $model->fftn_id))
$model->origin_id = Origin::firstOrCreate(['value'=>$m[1]])->id;
}
// If we can rebuild the message content, then we can do away with msg_src
if (md5($model->rebuildMessage()) === $model->msg_crc) {
Log::debug(sprintf('%s:- Pruning message source, since we can rebuild the message [%s]',self::LOGKEY,$model->msgid));
$model->msg_src = NULL;
}
});
static::created(function($model) {
@@ -160,27 +201,12 @@ final class Netmail extends Model implements Packet
]);
}
// Save our origin, tearline & tagline
if ($model->set->has('set_tagline'))
$model->tagline = $model->set->get('set_tagline');
if ($model->set->has('set_tearline'))
$model->tearline = $model->set->get('set_tearline');
if ($model->set->has('set_origin'))
$model->origin = $model->set->get('set_origin');
$model->save();
});
}
/* RELATIONS */
public function fftn()
{
return $this
->belongsTo(Address::class)
->withTrashed();
}
public function path()
{
return $this->belongsToMany(Address::class,'netmail_path')

20
app/Models/Origin.php Normal file
View File

@@ -0,0 +1,20 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Origin extends Model
{
//use HasFactory;
public const UPDATED_AT = NULL;
protected $fillable = ['value'];
public function complete(Address $o): string
{
return sprintf(' * Origin: %s (%s)',$this->value,$o->point_id ? $o->ftn4d : $o->ftn3d);
}
}

20
app/Models/Tagline.php Normal file
View File

@@ -0,0 +1,20 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Tagline extends Model
{
//use HasFactory;
public const UPDATED_AT = NULL;
protected $fillable = ['value'];
public function complete(): string
{
return sprintf('... %s',$this->value);
}
}

20
app/Models/Tearline.php Normal file
View File

@@ -0,0 +1,20 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Tearline extends Model
{
//use HasFactory;
public const UPDATED_AT = NULL;
protected $fillable = ['value'];
public function complete(): string
{
return sprintf('--- %s',$this->value);
}
}