| Server IP : 35.80.110.71 / Your IP : 216.73.216.221 Web Server : Apache/2.4.58 (Ubuntu) System : Linux ip-172-31-21-44 6.17.0-1019-aws #19~24.04.1-Ubuntu SMP Tue Jun 23 18:53:06 UTC 2026 x86_64 User : ubuntu ( 1000) PHP Version : 8.3.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/switchyard/releases/20260626133231/app/Models/ |
Upload File : |
<?php
namespace App\Models;
use App\Models\Concerns\BelongsToWorkspace;
use Illuminate\Database\Eloquent\Concerns\HasUlids;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
class ProjectTemplate extends Model
{
use BelongsToWorkspace;
use HasUlids;
protected $fillable = [
'workspace_id',
'name',
'service_tag',
'clickup_space_id',
'folder_name_pattern',
'structure',
'auto_scaffold',
];
protected function casts(): array
{
return [
'structure' => 'array',
'auto_scaffold' => 'boolean',
];
}
public function workspace(): BelongsTo
{
return $this->belongsTo(Workspace::class);
}
public function scaffoldRuns(): HasMany
{
return $this->hasMany(ScaffoldRun::class, 'template_id');
}
/**
* Expand template placeholders against a context dictionary.
*
* Supported placeholders: {client_name}, {template_name}, {lead_title},
* {service_tag}, {date}. Unknown placeholders are left intact so they're
* visible in the resulting ClickUp object names rather than silently
* dropped.
*/
public function expandFolderName(array $context): string
{
$replacements = [
'{client_name}' => $context['client_name'] ?? 'Untitled client',
'{template_name}' => $context['template_name'] ?? $this->name,
'{lead_title}' => $context['lead_title'] ?? '',
'{service_tag}' => $context['service_tag'] ?? $this->service_tag ?? '',
'{date}' => $context['date'] ?? now()->format('Y-m-d'),
];
return trim(strtr($this->folder_name_pattern, $replacements));
}
}