request = $request; $this->languageBaseRepository = $languageBaseRepository; $this->languageTranslateRepository = $languageTranslateRepository; $this->languageRepository = $languageRepository; $this->tableVariables = [ /* 'currency' => [ 'repository' => 'App\Core\Repository\Currency\CurrencyRepository', 'source_column' => 'name', 'key_column' => 'language_key', 'parent_structure' => false, 'parent_column_name' => null ], 'language' => [ 'repository' => 'App\Core\Repository\Language\LanguageRepository', 'source_column' => 'name', 'key_column' => 'language_key', 'parent_structure' => false, 'parent_column_name' => null ], 'property_channel_category' => [ 'repository' => 'App\Core\Repository\PropertyChannelCategory\PropertyChannelCategoryRepository', 'source_column' => 'name', 'key_column' => 'language_key', 'parent_structure' => false, 'parent_column_name' => null ], 'property_content_category' => [ 'repository' => 'App\Core\Repository\PropertyContentCategory\PropertyContentCategoryRepository', 'source_column' => 'name', 'key_column' => 'language_key', 'parent_structure' => false, 'parent_column_name' => null ], 'property_executive_type' => [ 'repository' => 'App\Core\Repository\PropertyExecutiveType\PropertyExecutiveTypeRepository', 'source_column' => 'name', 'key_column' => 'language_key', 'parent_structure' => false, 'parent_column_name' => null ], 'property_fact' => [ 'repository' => 'App\Core\Repository\PropertyFact\PropertyFactRepository', 'source_column' => 'name', 'key_column' => 'language_key', 'parent_structure' => true, 'parent_column_name' => 'parent_id' ], 'property_photo_category' => [ 'repository' => 'App\Core\Repository\PropertyPhotoCategory\PropertyPhotoCategoryRepository', 'source_column' => 'category_name', 'key_column' => 'language_key', 'parent_structure' => false, 'parent_column_name' => 'null' ], 'property_room_bed_type' => [ 'repository' => 'App\Core\Repository\PropertyRoomBedType\PropertyRoomBedTypeRepository', 'source_column' => 'name', 'key_column' => 'language_key', 'parent_structure' => false, 'parent_column_name' => 'null' ], 'property_room_type' => [ 'repository' => 'App\Core\Repository\PropertyRoomType\PropertyRoomTypeRepository', 'source_column' => 'name', 'key_column' => 'language_key', 'parent_structure' => false, 'parent_column_name' => 'null' ], 'property_type' => [ 'repository' => 'App\Core\Repository\PropertyType\PropertyTypeRepository', 'source_column' => 'name', 'key_column' => 'language_key', 'parent_structure' => false, 'parent_column_name' => 'null' ], 'country' => [ 'repository' => 'App\Core\Repository\Country\CountryRepository', 'source_column' => 'name', 'key_column' => 'language_key', 'parent_structure' => false, 'parent_column_name' => null ], 'property_room_view_type' => [ 'repository' => 'App\Core\Repository\PropertyRoomViewType\PropertyRoomViewTypeRepository', 'source_column' => 'name', 'key_column' => 'language_key', 'parent_structure' => false, 'parent_column_name' => null ], 'property_booking_type' => [ 'repository' => 'App\Core\Repository\PropertyBookingType\PropertyBookingTypeRepository', 'source_column' => 'name', 'key_column' => 'language_key', 'parent_structure' => false, 'parent_column_name' => null ], 'property_booking_payment_type' => [ 'repository' => 'App\Core\Repository\PropertyBookingPaymentType\PropertyBookingPaymentTypeRepository', 'source_column' => 'name', 'key_column' => 'language_key', 'parent_structure' => false, 'parent_column_name' => null ], 'property_availability_type' => [ 'repository' => 'App\Core\Repository\PropertyAvailabilityType\PropertyAvailabilityTypeRepository', 'source_column' => 'name', 'key_column' => 'language_key', 'parent_structure' => false, 'parent_column_name' => null ], 'property_place_category' => [ 'repository' => 'App\Core\Repository\PropertyPlaceCategory\PropertyPlaceCategoryRepository', 'source_column' => 'name', 'key_column' => 'language_key', 'parent_structure' => true, 'parent_column_name' => 'parent_id' ], 'property_place_working_hour' => [ 'repository' => 'App\Core\Repository\PropertyPlaceWorkingHour\PropertyPlaceWorkingHourRepository', 'source_column' => 'name', 'key_column' => 'language_key', 'parent_structure' => false, 'parent_column_name' => 'parent_id' ], 'property_place_fact_title' => [ 'repository' => 'App\Core\Repository\PropertyPlaceFactTitle\PropertyPlaceFactTitleRepository', 'source_column' => 'name', 'key_column' => 'language_key', 'parent_structure' => false, 'parent_column_name' => null ], 'property_place_fact' => [ 'repository' => 'App\Core\Repository\PropertyPlaceFact\PropertyPlaceFactRepository', 'source_column' => 'name', 'key_column' => 'language_key', 'parent_structure' => false, 'parent_column_name' => null ], 'place_category_field' => [ 'repository' => 'App\Core\Repository\PlaceCategoryField\PlaceCategoryFieldRepository', 'source_column' => 'name', 'key_column' => 'language_key', 'parent_structure' => false, 'parent_column_name' => null ], 'place_category_field_option' => [ 'repository' => 'App\Core\Repository\PlaceCategoryFieldOption\PlaceCategoryFieldOptionRepository', 'source_column' => 'name', 'key_column' => 'language_key', 'parent_structure' => false, 'parent_column_name' => null ], 'promotion_type' => [ 'repository' => 'App\Core\Repository\PromotionType\PromotionTypeRepository', 'source_column' => 'name', 'key_column' => 'language_key', 'parent_structure' => true, 'parent_column_name' => 'parent_id' ] */ ]; } public function createApplicationLanguageData() { $response = ['status' => -1, 'message' => '', 'data' => null]; try { $languageCriteria = [ 'criteria' => [ ['field' => 'status', 'condition' => '=', 'value' => 1], ['field' => 'is_application', 'condition' => '=', 'value' => 1], ['field' => 'is_published', 'condition' => '=', 'value' => 1] ], "orderBy" => [ ["field" => "name", "value" => "ASC"] ] ]; $languages = $this->languageRepository->findByCriteria($languageCriteria, ['id', 'code', 'name', 'status']); if (!$languages) { throw new ApiErrorException('Language data not found'); } $languagesBase = $this->languageBaseRepository->findByCriteria([], ['id', 'code', 'key', 'text']); $languagesBase = $languagesBase ? $languagesBase : []; $languagesBaseArray = []; foreach ($languagesBase as $base) { $languagesBaseArray[$base['key']] = $base['text']; } $languagesTranslate = $this->languageTranslateRepository->findByCriteria([], ['id', 'code', 'key', 'text']); $languagesTranslate = $languagesTranslate ? $languagesTranslate : []; $languagesTranslateArray = []; foreach ($languagesTranslate as $translate) { $languagesTranslateArray[$translate['code']][$translate['key']] = $translate['text']; } $languageExportData = []; foreach ($languages as $language) { $languageContent = null; if ($language['code'] == 'en') { $languageContent = $languagesBaseArray; } elseif (isset($languagesTranslateArray[$language['code']])) { $languageContent = $languagesTranslateArray[$language['code']]; } $languageExportData[$language['code']] = $languageContent; } $response = [ 'status' => 1, 'data' => $languageExportData ]; } catch (ApiErrorException $e) { $response['status'] = 0; $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 createApplicationLanguageFiles() { $response = ['status' => -1, 'message' => '', 'data' => null]; try { $languageCriteria = [ 'criteria' => [ ['field' => 'status', 'condition' => '=', 'value' => 1], ['field' => 'is_application', 'condition' => '=', 'value' => 1], ['field' => 'is_published', 'condition' => '=', 'value' => 1] ], "orderBy" => [ ["field" => "name", "value" => "ASC"] ] ]; $languages = $this->languageRepository->findByCriteria($languageCriteria, ['id', 'code', 'name', 'status']); if (!$languages) { throw new ApiErrorException('Language data not found'); } $languagesBase = $this->languageBaseRepository->findByCriteria([], ['id', 'code', 'key', 'text']); $languagesBase = $languagesBase ? $languagesBase : []; $languagesBaseArray = []; foreach ($languagesBase as $base) { $languagesBaseArray[$base['key']] = trim($base['text']); } $languagesTranslate = $this->languageTranslateRepository->findByCriteria([], ['id', 'code', 'key', 'text']); $languagesTranslate = $languagesTranslate ? $languagesTranslate : []; $languagesTranslateArray = []; foreach ($languagesTranslate as $translate) { $clearSpaceData = trim($translate['text']); if($clearSpaceData){ $languagesTranslateArray[$translate['code']][$translate['key']] = $clearSpaceData; } } $applicationLanguageFolder = Config::get('app.appLanguageJsonStoredFolder'); $myWebLanguageFolder = Config::get('app.myWebLanguageJsonStoredFolder'); //$wwwLanguageFolder = Config::get('app.wwwLanguageJsonStoredFolder'); $bookingEngineLanguageFolder = Config::get('app.bookingEngineLanguageJsonStoredFolder'); $apiLanguageFolder = resource_path() . '/lang/' ; foreach ($languages as $language) { $languageContent = null; if ($language['code'] == 'en') { $languageContent = $languagesBaseArray; } elseif (isset($languagesTranslateArray[$language['code']])) { $languageContent = $languagesTranslateArray[$language['code']]; } $filePath = $applicationLanguageFolder . '/language/' . $language['code']; if ($languageContent) { // App Language Create if (!File::exists($filePath)) { File::makeDirectory($filePath, 0777, true); } File::put($filePath . '/common.json', json_encode($languageContent, JSON_UNESCAPED_UNICODE)); // Api Language Create if (!File::exists($apiLanguageFolder)) { File::makeDirectory($apiLanguageFolder, 0777, true); } File::put($apiLanguageFolder . $language['code'] . '.json', json_encode($languageContent, JSON_UNESCAPED_UNICODE)); // MyWeb Language Create if (!File::exists($myWebLanguageFolder)) { File::makeDirectory($myWebLanguageFolder, 0777, true); } File::put($myWebLanguageFolder . $language['code'] . '.json', json_encode($languageContent, JSON_UNESCAPED_UNICODE)); // www Language Create /*if (!File::exists($wwwLanguageFolder)) { File::makeDirectory($wwwLanguageFolder, 0777, true); } File::put($wwwLanguageFolder . $language['code'] . '.json', json_encode($languageContent, JSON_UNESCAPED_UNICODE));*/ // bookingEngine Language Create if (!File::exists($bookingEngineLanguageFolder)) { File::makeDirectory($bookingEngineLanguageFolder, 0777, true); } File::put($bookingEngineLanguageFolder . $language['code'] . '.json', json_encode($languageContent, JSON_UNESCAPED_UNICODE)); } } try { Artisan::call('queue:restart'); } catch (Exception $error) { Log::error($error->getMessage()); } $response['status'] = 1; } catch (ApiErrorException $e) { $response['status'] = 0; $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 createApplicationLanguageBaseData() { $response = ['status' => -1, 'message' => '', 'data' => null]; try { $languagesBase = $this->languageBaseRepository->findByCriteria([], ['id', 'code', 'key', 'text']); $languagesBase = $languagesBase ? $languagesBase : []; $languagesBaseArray = []; foreach ($languagesBase as $base) { $languagesBaseArray[$base['key']] = $base['text']; } $insertBaseData = []; foreach ($this->tableVariables as $key => $value) { $repository = App::make($value['repository']); $tableVariables = $repository->findByCriteria([]); $tableVariables = $tableVariables ? $tableVariables : []; foreach ($tableVariables as $tableVariable) { if (!isset($languagesBaseArray[$tableVariable[$value['key_column']]])) { $insertBaseData[] = [ 'key' => $tableVariable[$value['key_column']], 'code' => 'en', 'text' => $tableVariable[$value['source_column']], 'status' => 1, 'created_by' => 1, 'updated_by' => 1, 'created_at' => time(), 'updated_at' => time(), ]; } } } $insertBaseDataStatus = $this->languageBaseRepository->createAll($insertBaseData); if ($insertBaseDataStatus['status'] != 'success') { throw new Exception('api-unknown_error'); } $response['status'] = 1; } catch (ApiErrorException $e) { $response['status'] = 0; $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 fillApplicationLanguageKeys() { $response = ['status' => -1, 'message' => '', 'data' => null]; try { foreach ($this->tableVariables as $key => $value) { print("for table => $key \n"); $repository = App::make($value['repository']); $oldVariables = $repository->findByCriteria([]); $oldVariables = $oldVariables ? $oldVariables : []; $oldVariablesCollect = collect($oldVariables); $oldVariables = $oldVariablesCollect->keyBy('id'); if ($value['parent_structure'] == true) { $mainFacts = $oldVariablesCollect->where('parent_id', '=', null); foreach ($mainFacts as $mainFact) { // main fact keys, $mainFactSlug = language_key($mainFact[$value['source_column']]); $mainFactLanguageKey = $key . '-' . $mainFactSlug; $mainFactLanguageKey = $this->keyGenerator($mainFactLanguageKey, $value['key_column'], $oldVariables, 0); if ($mainFact[$value['key_column']] == null) { $mainFact[$value['key_column']] = $mainFactLanguageKey; $oldVariables[$mainFact['id']] = $mainFact; $repository->update($mainFact['id'], [$value['key_column'] => $mainFactLanguageKey]); } $subFacts = $oldVariablesCollect->where('parent_id', '=', $mainFact['id']); foreach ($subFacts as $subFact) { // sub fact keys $subFactSlug = language_key($subFact[$value['source_column']]); $subFactLanguageKey = $mainFactLanguageKey . '-' . $subFactSlug; $subFactLanguageKey = $this->keyGenerator($subFactLanguageKey, $value['key_column'], $oldVariables, 0); if ($subFact[$value['key_column']] == null) { $subFact[$value['key_column']] = $subFactLanguageKey; $oldVariables[$subFact['id']] = $subFact; $repository->update($subFact['id'], [$value['key_column'] => $subFactLanguageKey]); } $facts = $oldVariablesCollect->where('parent_id', '=', $subFact['id']); foreach ($facts as $fact) { if ($fact[$value['key_column']] == null) { // sub fact keys $factSlug = language_key($fact[$value['source_column']]); $factLanguageKey = $subFactLanguageKey . '-' . $factSlug; $factLanguageKey = $this->keyGenerator($factLanguageKey, $value['key_column'], $oldVariables, 0); $fact[$value['key_column']] = $factLanguageKey; $oldVariables[$fact['id']] = $fact; $repository->update($fact['id'], [$value['key_column'] => $factLanguageKey]); } } } } } else { foreach ($oldVariables as $oldVariable) { if ($oldVariable[$value['key_column']] == null) { $slug = language_key($oldVariable[$value['source_column']]); $languageKey = $key . '-' . $slug; $languageKey = $this->keyGenerator($languageKey, $value['key_column'], $oldVariables, 0); $oldVariable[$value['key_column']] = $languageKey; $oldVariables[$oldVariable['id']] = $oldVariable; $repository->update($oldVariable['id'], [$value['key_column'] => $languageKey]); } } } } $response['status'] = 1; } catch (ApiErrorException $e) { $response['status'] = 0; $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); } protected function keyGenerator($key, $keyColumn, $oldData, $index) { $checkKey = collect($oldData)->where($keyColumn, '=', $key)->first(); if ($checkKey != null) { $keyArray1 = explode('-', $key); $lastArray1Item = end($keyArray1); $keyArray2 = explode('_', $lastArray1Item); $lastArray2Item = end($keyArray2); $index++; if (is_numeric($lastArray2Item)) { array_pop($keyArray2); array_push($keyArray2, $index); $array2ToStr = implode($keyArray2, "_"); array_pop($keyArray1); array_push($keyArray1, $array2ToStr); $array1ToStr = implode($keyArray1, "-"); $newKey = $array1ToStr; } else { $newKey = $key . '_' . $index; } $key = $this->keyGenerator($newKey, $keyColumn, $oldData, $index); } return $key; } }