Files
api-extranetwork/app/Core/Service/PropertyWebService.php
ExtraNetwork e5c4b6aa13 first commit
2026-05-12 17:04:54 +03:00

1180 lines
46 KiB
PHP

<?php
namespace App\Core\Service;
use App\Core\Repository\PropertyWeb\PropertyWebComponentMappingRepository;
use App\Core\Repository\PropertyWeb\PropertyWebComponentRepository;
use App\Core\Repository\PropertyWeb\PropertyWebGroupRepository;
use App\Core\Repository\PropertyWeb\PropertyWebReviewRepository;
use App\Core\Service\PropertyPhotoService\PropertyPhotoService;
use App\Core\Repository\PropertyWeb\PropertyWebRepository;
use App\Core\Repository\PropertyWebPhotoMapping\PropertyWebPhotoMappingRepository;
use App\Core\Service\PropertyWebAboutUsService;
use App\Core\Service\PropertyWebMenuMappingService;
use App\Core\Service\PropertyWebMenuService;
use App\Core\Validator\PropertyWeb\PropertyWebCreateValidator;
use App\Core\Validator\PropertyWeb\PropertyWebUpdateContentValidator;
use App\Core\Validator\PropertyWeb\PropertyWebUpdateValidator;
use App\Core\Validator\PropertyWeb\PropertyWebPublishValidator;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redis;
use Illuminate\Support\Str;
use App\Core\Service\PropertyAdditionalInfo\PropertyAdditionalInfoService;
use Illuminate\Support\Facades\Log;
use Exception;
use App\Exceptions\ApiErrorException;
use Illuminate\Support\Facades\Config;
use Carbon\Carbon;
use App\Core\Service\PropertyWebSetupService;
use App\Core\Service\PropertyWebLanguageMappingService;
use App\Core\Service\PropertyWebColorMappingService;
class PropertyWebService
{
private $propertyWebRepository;
private $propertyWebCreateValidator;
private $propertyWebUpdateValidator;
private $propertyWebPhotoMappingRepository;
private $propertyPhotoService;
private $propertyWebUpdateContentValidator;
private $propertyWebPublishValidator;
private $propertyWebMenuService;
private $propertyWebMenuMappingService;
private $propertyWebSetupService;
private $propertyWebLanguageMappingService;
private $propertyWebColorMappingService;
private $propertyWebAboutUsService;
private $propertyAdditionalInfoService;
private $propertyWebRoomMappingService;
private $propertyWebReviewRepository;
public function __construct(
PropertyWebRepository $propertyWebRepository,
PropertyWebGroupRepository $propertyWebGroupRepository,
PropertyWebPhotoMappingRepository $propertyWebPhotoMappingRepository,
PropertyPhotoService $propertyPhotoService,
PropertyWebCreateValidator $propertyWebCreateValidator,
PropertyWebUpdateValidator $propertyWebUpdateValidator,
PropertyWebUpdateContentValidator $propertyWebUpdateContentValidator,
PropertyWebPublishValidator $propertyWebPublishValidator,
PropertyWebMenuService $propertyWebMenuService,
PropertyWebMenuMappingService $propertyWebMenuMappingService,
PropertyWebSetupService $propertyWebSetupService,
PropertyWebLanguageMappingService $propertyWebLanguageMappingService,
PropertyWebColorMappingService $propertyWebColorMappingService,
PropertyAdditionalInfoService $propertyAdditionalInfoService,
PropertyWebAboutUsService $propertyWebAboutUsService,
PropertyWebRoomMappingService $propertyWebRoomMappingService,
PropertyWebPlaceMappingService $propertyWebPlaceMappingService,
PropertyWebComponentRepository $propertyWebComponentRepository,
PropertyWebComponentMappingRepository $propertyWebComponentMappingRepository,
PropertyWebReviewRepository $propertyWebReviewRepository
)
{
$this->propertyWebRepository = $propertyWebRepository;
$this->propertyWebGroupRepository = $propertyWebGroupRepository;
$this->propertyWebCreateValidator = $propertyWebCreateValidator;
$this->propertyWebUpdateValidator = $propertyWebUpdateValidator;
$this->propertyWebPhotoMappingRepository = $propertyWebPhotoMappingRepository;
$this->propertyPhotoService = $propertyPhotoService;
$this->propertyWebUpdateContentValidator = $propertyWebUpdateContentValidator;
$this->propertyWebPublishValidator = $propertyWebPublishValidator;
$this->propertyWebMenuService = $propertyWebMenuService;
$this->propertyWebMenuMappingService = $propertyWebMenuMappingService;
$this->propertyWebSetupService = $propertyWebSetupService;
$this->propertyWebLanguageMappingService = $propertyWebLanguageMappingService;
$this->propertyWebColorMappingService = $propertyWebColorMappingService;
$this->propertyWebAboutUsService = $propertyWebAboutUsService;
$this->propertyAdditionalInfoService = $propertyAdditionalInfoService;
$this->propertyWebRoomMappingService = $propertyWebRoomMappingService;
$this->propertyWebPlaceMappingService = $propertyWebPlaceMappingService;
$this->propertyWebComponentRepository = $propertyWebComponentRepository;
$this->propertyWebComponentMappingRepository = $propertyWebComponentMappingRepository;
$this->propertyWebReviewRepository = $propertyWebReviewRepository;
}
public function create($param = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$validationResult = $this->propertyWebCreateValidator->validate($param);
if ($validationResult->errors()->first()) {
$errors = $validationResult->errors()->all();
throw new ApiErrorException($errors);
}
$insertData =
[
"property_id" => fillOnUndefined($param, "property_id"),
"domain" => fillOnUndefined($param, "domain"),
"default_language" => fillOnUndefined($param, "default_language"),
"template_id" => fillOnUndefined($param, "template_id"),
"token" => getGuid(),
"status" => 1,
"is_published" => 0,
"is_dns_checked" => 0,
"created_by" => fillOnUndefined($param, "user_id"),
"updated_by" => fillOnUndefined($param, "user_id"),
"created_at" => time(),
"updated_at" => time(),
];
$userCreateResult = $this->propertyWebRepository->create($insertData);
if ($userCreateResult['status'] != 'success') {
throw new Exception('api-unknown_error');
}
$userData = $userCreateResult["data"];
$response = [
'status' => true,
'data' => $userData,
];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function select($param = [], $column = ['*'])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$data = $this->propertyWebRepository->findByCriteria($param, $column);
$response = [
'status' => true,
'data' => $data,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function selectWebGroup($param = [], $column = ['*'])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$data = $this->propertyWebGroupRepository->findByCriteria($param, $column);
$response = [
'status' => true,
'data' => $data,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function update($id, $param = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$propertyRequest = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => fillOnUndefined($param, 'property_id')],
['field' => 'id', 'condition' => '=', 'value' => fillOnUndefined($param, 'property_web_id')],
['field' => 'status', 'condition' => '=', 'value' => 1],
]
];
$propertyWebData = $this->propertyWebRepository->findByCriteria($propertyRequest, ['id', 'domain']);
if (!$propertyWebData) {
throw new ApiErrorException(lang('Property - Web mapping not found.'));
}
$updateData =
[
"domain" => fillOnUndefined($param, "domain"),
"default_language" => fillOnUndefined($param, "default_language"),
"template_id" => fillOnUndefined($param, "template_id"),
"updated_by" => fillOnUndefined($param, "user_id"),
"updated_at" => time(),
];
$validationResult = $this->propertyWebUpdateValidator->validate($param);
if ($validationResult->errors()->first()) {
$errors = $validationResult->errors()->all();
throw new ApiErrorException($errors);
}
$updateResult = $this->propertyWebRepository->update($id, $updateData);
if ($updateResult['status'] != 'success') {
throw new Exception('api-unknown_error');
}
$updateData = $updateResult["data"];
$response = [
'status' => true,
'data' => $updateData,
];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function updateLanguages($param = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$propertyRequest = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => fillOnUndefined($param, 'property_id')],
['field' => 'id', 'condition' => '=', 'value' => fillOnUndefined($param, 'property_web_id')],
['field' => 'status', 'condition' => '=', 'value' => 1],
],
'firstRow' => true
];
$propertyWebData = $this->propertyWebRepository->findByCriteria($propertyRequest, ['id', 'domain']);
if (!$propertyWebData) {
throw new ApiErrorException(lang('Property - Web updateLanguage data not found.'));
}
$updateData =
[
"languages" => fillOnUndefined($param, "languages"),
"updated_by" => fillOnUndefined($param, "user_id"),
"updated_at" => time(),
];
$updateResult = $this->propertyWebRepository->update($propertyWebData['id'], $updateData);
if ($updateResult['status'] != 'success') {
throw new Exception('api-unknown_error');
}
$updateData = $updateResult["data"];
$response = [
'status' => true,
'data' => $updateData,
];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function getPropertyWeb($params = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$propertyRequest = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => fillOnUndefined($params, 'property_id')],
['field' => 'id', 'condition' => '=', 'value' => fillOnUndefined($params, 'id')],
],
"with" => ['propertyWebTemplate', 'propertyWebLanguage'],
"firstRow" => 1
];
$propertyWebs = $this->select($propertyRequest, ['id', 'domain', 'default_language', 'template_id', 'token', 'status', 'is_published', 'is_dns_checked', 'weather_active', 'cover_video_id']);
if ($propertyWebs['status'] != 'success' || !$propertyWebs['data']) {
throw new ApiErrorException('Property Web Data not found');
}
$response = [
'status' => true,
'data' => $propertyWebs['data'],
];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function insertAllPropertyWebPhotosToMapping($params = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$propertyPhotoRequest = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => fillOnUndefined($params, 'property_id')],
['field' => 'status', 'condition' => '=', 'value' => 1],
],
];
$propertyPhotos = $this->propertyPhotoService->select($propertyPhotoRequest, ['*']);
if ($propertyPhotos['status'] != 'success') {
throw new ApiErrorException('Property Photo Data not found');
}
$propertyPhotos = $propertyPhotos['data'] ? $propertyPhotos['data'] : [];
$insertPhotos = [];
foreach ($propertyPhotos as $propertyPhoto) {
$insertPhotos[] = [
'property_id' => fillOnUndefined($params, 'property_id'),
'property_web_id' => fillOnUndefined($params, 'id'),
'property_photo_id' => $propertyPhoto['id'],
'is_cover' => 0,
'status' => 1,
"created_by" => fillOnUndefined($params, "user_id"),
"updated_by" => fillOnUndefined($params, "user_id"),
"created_at" => time(),
"updated_at" => time(),
];
}
$propertyWebPhotos = $this->propertyWebPhotoMappingRepository->insert($insertPhotos);
if ($propertyWebPhotos['status'] != 'success') {
throw new Exception('api-unknown_error');
}
$response = [
'status' => true,
'data' => null,
];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function getPropertyWebPhotos($params = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$propertyPhotoRequest = [
'property_id' => fillOnUndefined($params, 'property_id')
];
$propertyPhotos = $this->propertyPhotoService->getPropertyPhotos($propertyPhotoRequest);
if ($propertyPhotos['status'] != 'success') {
throw new ApiErrorException('Property Photo Data not found');
}
$propertyPhotos = $propertyPhotos['data'];
$propertyWebPhotoMappingRequest = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => fillOnUndefined($params, 'property_id')],
['field' => 'property_web_id', 'condition' => '=', 'value' => fillOnUndefined($params, 'id')],
['field' => 'status', 'condition' => '=', 'value' => 1],
],
];
$propertyWebMappingPhotos = $this->propertyWebPhotoMappingRepository->findByCriteria($propertyWebPhotoMappingRequest);
$propertyWebMappingPhotos = $propertyWebMappingPhotos ? $propertyWebMappingPhotos : [];
$propertyWebPhotos = collect($propertyWebMappingPhotos)->keyBy('property_photo_id')->toArray();
$propertyWebCover = collect($propertyWebMappingPhotos)->where('is_cover', '=', 1)->keyBy('property_photo_id')->toArray();
$photoArray = [];
foreach ($propertyPhotos as $propertyPhoto) {
$propertyWebCoverPhoto = isset($propertyWebCover[$propertyPhoto['id']]) ? $propertyWebCover[$propertyPhoto['id']] : null;
$photoArray[] = [
'photo_id' => $propertyPhoto['id'],
'photo_url_thump' => $propertyPhoto['photo_url_thump'],
'is_cover' => isset($propertyWebCover[$propertyPhoto['id']]),
'cover_order' => fillOnUndefined($propertyWebCoverPhoto,'cover_order'),
'is_selected' => isset($propertyWebPhotos[$propertyPhoto['id']]),
'is_compatible_with_myweb_slider' => $propertyPhoto['is_compatible_with_myweb_slider']
];
}
$response = [
'status' => true,
'data' => $photoArray,
];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function selectPropertyWebPhotos($param = [], $column = ['*'])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$data = $this->propertyWebPhotoMappingRepository->findByCriteria($param, $column);
$response = [
'status' => true,
'data' => $data,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function updatePropertyWebContent($params = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
DB::beginTransaction();
$validationResult = $this->propertyWebUpdateContentValidator->validate($params);
if ($validationResult->errors()->first()) {
$errors = $validationResult->errors()->all();
throw new ApiErrorException($errors);
}
$updateData = [
"weather_active" => fillOnUndefined($params, "weather_active", null),
"cover_video_id" => fillOnUndefined($params, "cover_video_id", null),
"updated_at" => time(),
];
$this->propertyWebRepository->update($params['property_web_id'], $updateData);
$languagesUpdateData = [
"property_id" => fillOnUndefined($params, "property_id"),
"property_web_id" => fillOnUndefined($params, "property_web_id"),
"user_id" => fillOnUndefined($params, "user_id")
];
$languagesUpdateData['languages'] = NULL;
if (!empty($params['languages'])) {
$languagesUpdateData['languages'] = json_encode($params['languages']);
}
$updatePropertyWebLanguageMappingResult = $this->propertyWebLanguageMappingService->updatePropertyWebLanguageMapping($params);
if ($updatePropertyWebLanguageMappingResult['status'] != 'success') {
throw new ApiErrorException($updatePropertyWebLanguageMappingResult['message']);
}
$updatePropertyWebColorMappingResult = $this->propertyWebColorMappingService->updatePropertyWebColorMapping($params);
if ($updatePropertyWebColorMappingResult['status'] != 'success') {
throw new ApiErrorException($updatePropertyWebColorMappingResult['message']);
}
$updatePropertyWebMenuMappingResult = $this->propertyWebMenuMappingService->updatePropertyWebMenuMapping($params);
if ($updatePropertyWebMenuMappingResult['status'] != 'success') {
throw new ApiErrorException($updatePropertyWebMenuMappingResult['message']);
}
$updatePropertyWeAboutUsResult = $this->propertyWebAboutUsService->updatePropertyWebAboutUs($params);
if ($updatePropertyWeAboutUsResult['status'] != 'success') {
throw new ApiErrorException($updatePropertyWeAboutUsResult['message']);
}
$updatePropertyWebRoomMappingResult = $this->propertyWebRoomMappingService->updatePropertyWebRooomMapping($params);
if ($updatePropertyWebRoomMappingResult['status'] != 'success') {
throw new ApiErrorException($updatePropertyWebRoomMappingResult['message']);
}
$updatePropertyWebPlaceMappingResult = $this->propertyWebPlaceMappingService->updatePropertyWebPlaceMapping($params);
if ($updatePropertyWebPlaceMappingResult['status'] != 'success') {
throw new ApiErrorException($updatePropertyWebPlaceMappingResult['message']);
}
$updateAdditionalInfoData = [
'locale' => fillOnUndefined($params, 'locale'),
'additional_info' => fillOnUndefined($params, 'additional_info'),
'property_id' => fillOnUndefined($params, 'property_id'),
'user_id' => $params['user_id'],
'country_code' => fillOnUndefined($params, 'property_country_code'),
];
if ($params['action'] == "publish") {
$updateAdditionalInfo = $this->propertyAdditionalInfoService->updateOrCreatePropertyAdditionalInfo($updateAdditionalInfoData);
if ($updateAdditionalInfo['status'] != 'success') {
throw new ApiErrorException($updateAdditionalInfo['message']);
}
}
if ($params['action'] == "preview") {
$updatePhotoPreview = $this->updatePhotoPreview($params);
if ($updatePhotoPreview['status'] != 'success') {
throw new ApiErrorException($updatePhotoPreview['message']);
}
} elseif ($params['action'] == "publish") {
$updatePhotoPublish = $this->updatePhotoPublish($params);
if ($updatePhotoPublish['status'] != 'success') {
throw new ApiErrorException($updatePhotoPublish['message']);
}
}
//Domain Cache Clean
//if ($params['action'] == "publish") {
$propertyRequest = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => fillOnUndefined($params, 'property_id')],
['field' => 'id', 'condition' => '=', 'value' => fillOnUndefined($params, 'property_web_id')],
['field' => 'status', 'condition' => '=', 'value' => 1],
], 'firstRow' => true
];
$propertyWebData = $this->propertyWebRepository->findByCriteria($propertyRequest, ['id', 'domain']);
if ($propertyWebData) {
$checkDomainStatusCacheKey = 'myweb:' . 'checkDomainStatus'.md5('checkDomainStatus-' . $propertyWebData['domain']);
if (!empty(Redis::executeRaw(['KEYS', $checkDomainStatusCacheKey]))) {
Redis::executeRaw(['DEL', $checkDomainStatusCacheKey]);
}
}
//}
//Domain Cache Clean
$response = [
'status' => true,
'data' => null,
];
DB::commit();
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
DB::rollBack();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
DB::rollBack();
}
return output($response);
}
public function updatePhotoPreview($params = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
// delete preview photos ;
$getDeletePhotosRequest = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => fillOnUndefined($params, 'property_id')],
['field' => 'property_web_id', 'condition' => '=', 'value' => fillOnUndefined($params, 'property_web_id')],
['field' => 'status', 'condition' => '=', 'value' => 2],
],
];
$deleteWebMappingPhotos = $this->propertyWebPhotoMappingRepository->findByCriteria($getDeletePhotosRequest, ['id']);
$deleteWebMappingPhotos = $deleteWebMappingPhotos ? $deleteWebMappingPhotos : [];
$deleteMappingIds = array_column($deleteWebMappingPhotos, 'id');
if ($deleteMappingIds) {
$destroyStatus = $this->propertyWebPhotoMappingRepository->destroy($deleteMappingIds);
if ($destroyStatus['status'] != 'success') {
throw new Exception('api-unknown_error');
}
}
$coverPhotos = $params['cover_photos'];
$photoMapping = $params['photo_mapping'];
$insertPhotos = [];
$coverOrder = 1;
foreach ($coverPhotos as $photoId) {
$insertPhotos[] = [
'property_id' => fillOnUndefined($params, 'property_id'),
'property_web_id' => fillOnUndefined($params, 'property_web_id'),
'property_photo_id' => $photoId,
'is_cover' => 1,
'cover_order' => $coverOrder,
'status' => 2,
"created_by" => fillOnUndefined($params, "user_id"),
"updated_by" => fillOnUndefined($params, "user_id"),
"created_at" => time(),
"updated_at" => time(),
];
$coverOrder++;
}
foreach ($photoMapping as $photoId) {
$insertPhotos[] = [
'property_id' => fillOnUndefined($params, 'property_id'),
'property_web_id' => fillOnUndefined($params, 'property_web_id'),
'property_photo_id' => $photoId,
'is_cover' => 0,
'cover_order' => null,
'status' => 2,
"created_by" => fillOnUndefined($params, "user_id"),
"updated_by" => fillOnUndefined($params, "user_id"),
"created_at" => time(),
"updated_at" => time(),
];
}
$propertyWebPhotos = $this->propertyWebPhotoMappingRepository->insert($insertPhotos);
if ($propertyWebPhotos['status'] != 'success') {
throw new Exception('api-unknown_error');
}
$response = [
'status' => true,
'data' => null,
];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function updatePhotoPublish($params = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
// delete preview photos ;
$getDeletePhotosRequest = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => fillOnUndefined($params, 'property_id')],
['field' => 'property_web_id', 'condition' => '=', 'value' => fillOnUndefined($params, 'property_web_id')],
],
];
$deleteWebMappingPhotos = $this->propertyWebPhotoMappingRepository->findByCriteria($getDeletePhotosRequest, ['id']);
$deleteWebMappingPhotos = $deleteWebMappingPhotos ? $deleteWebMappingPhotos : [];
$deleteMappingIds = array_column($deleteWebMappingPhotos, 'id');
if ($deleteMappingIds) {
$destroyStatus = $this->propertyWebPhotoMappingRepository->destroy($deleteMappingIds);
if ($destroyStatus['status'] != 'success') {
throw new Exception('api-unknown_error');
}
}
$coverPhotos = $params['cover_photos'];
$photoMapping = $params['photo_mapping'];
$insertPhotos = [];
$coverPhotosCollect = collect($coverPhotos);
$photoMappingCollect = collect($photoMapping);
$photoMapping = $photoMappingCollect->diff($coverPhotosCollect)->toArray();
$coverOrder = 1;
foreach ($coverPhotos as $photoId) {
$insertPhotos[] = [
'property_id' => fillOnUndefined($params, 'property_id'),
'property_web_id' => fillOnUndefined($params, 'property_web_id'),
'property_photo_id' => $photoId,
'is_cover' => 1,
'cover_order' => $coverOrder,
'status' => 1,
"created_by" => fillOnUndefined($params, "user_id"),
"updated_by" => fillOnUndefined($params, "user_id"),
"created_at" => time(),
"updated_at" => time(),
];
$coverOrder++;
}
foreach ($photoMapping as $photoId) {
$insertPhotos[] = [
'property_id' => fillOnUndefined($params, 'property_id'),
'property_web_id' => fillOnUndefined($params, 'property_web_id'),
'property_photo_id' => $photoId,
'is_cover' => 0,
'cover_order' => null,
'status' => 1,
"created_by" => fillOnUndefined($params, "user_id"),
"updated_by" => fillOnUndefined($params, "user_id"),
"created_at" => time(),
"updated_at" => time(),
];
}
$propertyWebPhotos = $this->propertyWebPhotoMappingRepository->insert($insertPhotos);
if ($propertyWebPhotos['status'] != 'success') {
throw new Exception('api-unknown_error');
}
$response = [
'status' => true,
'data' => null,
];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function setPublishWeb($param = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$validationResult = $this->propertyWebPublishValidator->validate($param);
if ($validationResult->errors()->first()) {
$errors = $validationResult->errors()->all();
throw new ApiErrorException($errors);
}
$propertyRequest = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => fillOnUndefined($param, 'property_id')],
['field' => 'id', 'condition' => '=', 'value' => fillOnUndefined($param, 'property_web_id')],
['field' => 'status', 'condition' => '=', 'value' => 1],
]
];
$propertyWebData = $this->propertyWebRepository->findByCriteria($propertyRequest, ['id', 'domain']);
if (!$propertyWebData) {
throw new ApiErrorException(lang('Property - Web mapping not found.'));
}
$updateData =
[
"is_published" => fillOnUndefined($param, "is_publish", 0),
"updated_by" => fillOnUndefined($param, "user_id"),
"updated_at" => time(),
];
$updateResult = $this->propertyWebRepository->update($param['property_web_id'], $updateData);
if ($updateResult['status'] != 'success') {
throw new Exception('api-unknown_error');
}
$updateData = $updateResult["data"];
$response = [
'status' => true,
'data' => $updateData,
];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function checkDnsStatus()
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$propertyRequest = [
'criteria' => [
['field' => 'status', 'condition' => '=', 'value' => 1],
['field' => 'is_dns_checked', 'condition' => '=', 'value' => 0],
]
];
$propertyWebData = $this->propertyWebRepository->findByCriteria($propertyRequest, ['id', 'domain']);
if (!$propertyWebData) {
throw new ApiErrorException(lang('Property - Web mapping not found.'));
}
foreach ($propertyWebData as $web) {
$checkHostName = $web['domain'];
$domainStatus = 0;
$hostNameArray = parse_url($checkHostName);
if (isset($hostNameArray['host'])) {
$hostName = $hostNameArray['host'];
} else {
$pathArray = explode('/', $hostNameArray['path']);
$hostName = $pathArray[0];
}
$recordsArray = [];
$checkRecords = dns_get_record($hostName, DNS_CNAME, $authns_cname, $addtl_cname);
$recordsArray = array_merge($recordsArray, $checkRecords);
$recordsCollection = collect($recordsArray);
if ($recordsCollection->where('type', 'CNAME')->where('target', '=', Config::get('app.getMyWebCNAME'))->isNotEmpty() === true) {
$domainStatus = 1;
}
if ($domainStatus == 1) {
$updateData =
[
"is_dns_checked" => 1,
"updated_by" => 1,
"updated_at" => time(),
];
$updateResult = $this->propertyWebRepository->update($web['id'], $updateData);
if ($updateResult['status'] != 'success') {
throw new Exception('api-unknown_error');
}
}
}
$response = [
'status' => true,
];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function selectPropertyWebComponent($param = [], $column = ['*'])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$data = $this->propertyWebComponentRepository->findByCriteria($param, $column);
$response = [
'status' => true,
'data' => $data,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function selectPropertyWebComponentMapping($param = [], $column = ['*'])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$data = $this->propertyWebComponentMappingRepository->findByCriteria($param, $column);
$response = [
'status' => true,
'data' => $data,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function createPropertyWebComponentMapping($param = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$insertData = [
'property_id' => fillOnUndefined($param, 'property_id'),
'channel_id' => fillOnUndefined($param, 'channel_id'),
'component_id' => fillOnUndefined($param, 'component_id'),
'parameter' => fillOnUndefined($param, 'parameter'),
'language' => fillOnUndefined($param, 'language'),
'status' => 1,
'created_by' => fillOnUndefined($param, 'created_by'),
'updated_by' => fillOnUndefined($param, 'updated_by'),
'created_at' => time(),
'updated_at' => time(),
];
$createResult = $this->propertyWebComponentMappingRepository->create($insertData);
if ($createResult['status'] != 'success') {
throw new Exception('api-unknown_error');
}
//Domain Cache Clean
$propertyRequest = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => fillOnUndefined($param, 'property_id')],
['field' => 'status', 'condition' => '=', 'value' => 1],
], 'firstRow' => true
];
$propertyWebData = $this->propertyWebRepository->findByCriteria($propertyRequest, ['id', 'domain']);
if ($propertyWebData) {
$checkDomainStatusCacheKey = 'myweb:' . 'checkDomainStatus'.md5('checkDomainStatus-' . $propertyWebData['domain']);
if (!empty(Redis::executeRaw(['KEYS', $checkDomainStatusCacheKey]))) {
Redis::executeRaw(['DEL', $checkDomainStatusCacheKey]);
}
}
//Domain Cache Clean
$response = [
'status' => true,
'data' => $createResult['data'],
];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function updatePropertyWebComponentMapping($id, $param = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$updateData = [
'property_id' => fillOnUndefined($param, 'property_id'),
'channel_id' => fillOnUndefined($param, 'channel_id'),
'component_id' => fillOnUndefined($param, 'component_id'),
'parameter' => fillOnUndefined($param, 'parameter'),
'language' => fillOnUndefined($param, 'language'),
'updated_by' => fillOnUndefined($param, 'updated_by'),
'updated_at' => time(),
];
$updateResult = $this->propertyWebComponentMappingRepository->update($id, $updateData);
if ($updateResult['status'] != 'success') {
throw new Exception('api-unknown_error');
}
//Domain Cache Clean
$propertyRequest = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => fillOnUndefined($param, 'property_id')],
['field' => 'status', 'condition' => '=', 'value' => 1],
], 'firstRow' => true
];
$propertyWebData = $this->propertyWebRepository->findByCriteria($propertyRequest, ['id', 'domain']);
if ($propertyWebData) {
$checkDomainStatusCacheKey = 'myweb:' . 'checkDomainStatus'.md5('checkDomainStatus-' . $propertyWebData['domain']);
if (!empty(Redis::executeRaw(['KEYS', $checkDomainStatusCacheKey]))) {
Redis::executeRaw(['DEL', $checkDomainStatusCacheKey]);
}
}
//Domain Cache Clean
$response = [
'status' => true,
'data' => $updateResult['data'],
];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function deletePropertyWebComponentMapping($id)
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$deleteCriteria = [
'criteria' => [
['field' => 'id', 'condition' => '=', 'value' => $id]
]
];
$deleteResult = $this->propertyWebComponentMappingRepository->delete($deleteCriteria);
if (empty($deleteResult)) {
throw new Exception('api-unknown_error');
}
$response = [
'status' => true,
'data' => $deleteResult,
];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
/*** Property Web Review ***/
public function selectPropertyWebReview($param = [], $column = ['*'])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$data = $this->propertyWebReviewRepository->findByCriteria($param, $column);
$response = [
'status' => true,
'data' => $data,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function createPropertyWebReview($param = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$insertData = [
'property_id' => fillOnUndefined($param, 'property_id'),
'channel_id' => fillOnUndefined($param, 'channel_id'),
'channel' => fillOnUndefined($param, 'channel'),
'code' => fillOnUndefined($param, 'code'),
'language_code' => fillOnUndefined($param, 'language_code'),
'author' => fillOnUndefined($param, 'author'),
'profile_photo' => fillOnUndefined($param, 'profile_photo'),
'rating' => fillOnUndefined($param, 'rating'),
'review' => fillOnUndefined($param, 'review'),
'time' => fillOnUndefined($param, 'time'),
'status' => 1,
'created_by' => fillOnUndefined($param, 'created_by'),
'updated_by' => fillOnUndefined($param, 'updated_by'),
'created_at' => time(),
'updated_at' => time(),
];
$createResult = $this->propertyWebReviewRepository->create($insertData);
if ($createResult['status'] != 'success') {
throw new ApiErrorException($createResult['message']);
}
$response = [
'status' => true,
'data' => $createResult['data'],
];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
/*** Property Web Review ***/
}