snapshot of https://github.com/krayin/laravel-crm.git (2.2, 2026-09-18; blobs > 131072B omitted)
Some checks failed
Admin | Playwright Tests / Admin | Playwright Tests | Shard 1 Of 6 (push) Failing after 37s
Admin | Playwright Tests / Admin | Playwright Tests | Shard 2 Of 6 (push) Failing after 7s
Admin | Playwright Tests / Admin | Playwright Tests | Shard 4 Of 6 (push) Failing after 7s
Admin | Playwright Tests / Admin | Playwright Tests | Shard 6 Of 6 (push) Failing after 6s
Linting Tests / PHP 8.3 test on ubuntu-latest (push) Failing after 5s
CI / PHP 8.3 test on ubuntu-latest (push) Failing after 6s
Skills Consistency / validate-skills (push) Successful in 10s
Admin | Playwright Tests / Admin | Playwright Tests | Shard 3 Of 6 (push) Failing after 7s
Admin | Playwright Tests / Admin | Playwright Tests | Shard 5 Of 6 (push) Failing after 6s

This commit is contained in:
upstream-mirror
2026-09-18 04:37:41 +05:00
commit 135ffdb085
1274 changed files with 144880 additions and 0 deletions

View File

@@ -0,0 +1,268 @@
<?php
namespace Webkul\Attribute\Repositories;
use Carbon\Carbon;
use Illuminate\Container\Container;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Storage;
use Webkul\Attribute\Contracts\Attribute;
use Webkul\Attribute\Contracts\AttributeValue;
use Webkul\Core\Eloquent\Repository;
class AttributeValueRepository extends Repository
{
/**
* Create a new repository instance.
*
* @return void
*/
public function __construct(
protected AttributeRepository $attributeRepository,
Container $container
) {
parent::__construct($container);
}
/**
* Specify model class name.
*
* @return mixed
*/
public function model()
{
return AttributeValue::class;
}
/**
* Save attribute value.
*/
public function save(array $data, $attributes = []): void
{
if (empty($attributes)) {
$conditions = ['entity_type' => $data['entity_type']];
if (isset($data['quick_add'])) {
$conditions['quick_add'] = 1;
}
$attributes = $this->attributeRepository->where($conditions)->get();
}
foreach ($attributes as $attribute) {
$typeColumn = $this->model::$attributeTypeFields[$attribute->type];
if ($attribute->type === 'boolean') {
$data[$attribute->code] = isset($data[$attribute->code]) && $data[$attribute->code] ? 1 : 0;
}
if (! array_key_exists($attribute->code, $data)) {
continue;
}
if ($attribute->type === 'price'
&& isset($data[$attribute->code])
&& $data[$attribute->code] === ''
) {
$data[$attribute->code] = null;
}
if ($attribute->type === 'date' && $data[$attribute->code] === '') {
$data[$attribute->code] = null;
}
if ($attribute->type === 'multiselect' || $attribute->type === 'checkbox') {
$data[$attribute->code] = implode(',', $data[$attribute->code]);
}
if ($attribute->type === 'email' || $attribute->type === 'phone') {
$data[$attribute->code] = $this->sanitizeEmailAndPhone($data[$attribute->code]);
}
if ($attribute->type === 'image' || $attribute->type === 'file') {
$data[$attribute->code] = $data[$attribute->code] instanceof UploadedFile
? $data[$attribute->code]->store($data['entity_type'].'/'.$data['entity_id'])
: null;
}
$attributeValue = $this->findOneWhere([
'entity_type' => $data['entity_type'],
'entity_id' => $data['entity_id'],
'attribute_id' => $attribute->id,
]);
if (! $attributeValue) {
$this->create([
'entity_type' => $data['entity_type'],
'entity_id' => $data['entity_id'],
'attribute_id' => $attribute->id,
$typeColumn => $data[$attribute->code],
]);
} else {
$this->update([
$typeColumn => $data[$attribute->code],
], $attributeValue->id);
if ($attribute->type == 'image' || $attribute->type == 'file') {
if ($attributeValue->text_value) {
Storage::delete($attributeValue->text_value);
}
}
}
}
}
/**
* Is value unique.
*
* @param int $entityId
* @param string $entityType
* @param Attribute $attribute
* @param string $value
* @return bool
*/
public function isValueUnique($entityId, $entityType, $attribute, $value)
{
$query = $this->resetScope()->model
->where('attribute_id', $attribute->id)
->where('entity_type', $entityType)
->where('entity_id', '!=', $entityId);
/**
* If the attribute type is email or phone, check the JSON value.
*/
if (in_array($attribute->type, ['email', 'phone'])) {
$query->whereJsonContains($this->model::$attributeTypeFields[$attribute->type], [['value' => $value]]);
} else {
$query->where($this->model::$attributeTypeFields[$attribute->type], $value);
}
return $query->get()->count() ? false : true;
}
/**
* Removed null values from email and phone fields.
*
* @param array $data
* @return array
*/
public function sanitizeEmailAndPhone($data)
{
foreach ($data as $key => $row) {
if (is_null($row['value'])) {
unset($data[$key]);
}
}
return $data;
}
/**
* Replace placeholders with values
*/
public function getAttributeLabel(mixed $value, mixed $attribute)
{
switch ($attribute?->type) {
case 'price':
$label = core()->formatBasePrice($value);
break;
case 'boolean':
$label = $value ? 'Yes' : 'No';
break;
case 'select':
case 'radio':
case 'lookup':
if ($attribute->lookup_type) {
$option = $this->attributeRepository->getLookUpEntity($attribute->lookup_type, $value);
} else {
$option = $attribute->options->where('id', $value)->first();
}
$label = $option?->name;
break;
case 'multiselect':
case 'checkbox':
if ($attribute->lookup_type) {
$options = $this->attributeRepository->getLookUpEntity($attribute->lookup_type, explode(',', $value));
} else {
$options = $attribute->options->whereIn('id', explode(',', $value));
}
$optionsLabels = [];
foreach ($options as $key => $option) {
$optionsLabels[] = $option->name;
}
$label = implode(', ', $optionsLabels);
break;
case 'email':
case 'phone':
if (! is_array($value)) {
break;
}
$optionsLabels = [];
foreach ($value as $item) {
$optionsLabels[] = $item['value'].' ('.$item['label'].')';
}
$label = implode(', ', $optionsLabels);
break;
case 'address':
if (
! $value
|| ! count(array_filter($value))
) {
break;
}
$label = $value['address'].'<br>'
.$value['postcode'].' '.$value['city'].'<br>'
.core()->state_name($value['state']).'<br>'
.core()->country_name($value['country']).'<br>';
break;
case 'date':
if ($value) {
$label = Carbon::parse($value)->format('D M d, Y');
} else {
$label = null;
}
break;
case 'datetime':
if ($value) {
$label = Carbon::parse($value)->format('D M d, Y H:i A');
} else {
$label = null;
}
break;
default:
if ($value instanceof Carbon) {
$label = $value->format('D M d, Y H:i A');
} else {
$label = $value;
}
break;
}
return $label ?? null;
}
}