![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/ledger.corals.io/Corals/modules/TroubleTicket/Models/ |
<?php namespace Corals\Modules\TroubleTicket\Models; use Corals\Activity\Models\Activity; use Corals\Foundation\Models\BaseModel; use Corals\Foundation\Traits\ModelPropertiesTrait; use Corals\Foundation\Traits\ModelUniqueCode; use Corals\Foundation\Transformers\PresentableTrait; use Corals\Modules\Utility\Models\Category\Category; use Corals\Modules\Utility\Traits\Comment\ModelHasComments; use Corals\User\Models\User; use Illuminate\Database\Eloquent\Relations\MorphTo; use Illuminate\Support\Arr; use Spatie\Activitylog\Traits\LogsActivity; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; class TroubleTicket extends BaseModel implements HasMedia { use PresentableTrait, LogsActivity, ModelPropertiesTrait, ModelUniqueCode, ModelHasComments, InteractsWithMedia; const LOCKED_STATUSES = ['closed', 'resolved']; /** * Model configuration. * @var string */ public $config = 'trouble_ticket.models.troubleTicket'; protected $table = 'tt_trouble_tickets'; protected $casts = [ 'properties' => 'json', ]; public $guarded = ['id']; public function model(): MorphTo { return $this->morphTo(); } public function owner(): MorphTo { return $this->morphTo(); } public function assignees() { return $this->morphMany(Assignment::class, 'model') ->where('assignee_type', getMorphAlias(User::class)); } public function issueType() { return $this->belongsTo(IssueType::class); } public function team() { return $this->belongsTo(Team::class); } public function category() { return $this->belongsTo(Category::class); } public function getIsPublicAttribute() { return $this->owner instanceof PublicOwner; } public function getPublicOwnerAttribute() { return [ 'email' => optional($this->owner)->email, 'name' => optional($this->owner)->name, ]; } public function logActivity($description, $properties = []) { $activity = activity('TroubleTicket')->on($this); if (user()) { $activity->causedBy(user()); } else { // may be change it to be by owner owner $activity->causedByAnonymous(); } $activity->withProperties($properties); $activity->log($description); } public function ttActivities() { return $this->morphMany(Activity::class, 'subject')->latest('id')->inLog('TroubleTicket'); } public function handleActivityRecord($activity) { $changes = $activity->changes(); $skippedAttr = ['owner_type', 'owner_id',]; $result = []; foreach ($changes as $changeKey => $attributes) { $tt = new TroubleTicket(); $tt->fill($attributes); $formattedAttributes = []; foreach ($attributes as $key => $value) { if (in_array($key, $skippedAttr)) { continue; } $key = str_replace('_id', '', $key); $formattedAttributes[$key] = [ 'label' => trans('TroubleTicket::attributes.troubleTicket.' . $key), 'value' => $tt->present($key), ]; } $result[$changeKey] = $formattedAttributes; } $final = []; foreach ($result['attributes'] ?? [] as $key => $item) { $oldValue = Arr::get($result, "old.$key.value"); if (!empty($oldValue)) { $item['old_value'] = $oldValue; } if (empty(trim($oldValue, '-')) && empty(trim($item['value'], '-'))) { continue; } $final[$key] = $item; } return $final; } }