cms-token/@core/app/Http/Controllers/LanguageController.php

457 lines
18 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\AppointmentCategoryLang;
use App\AppointmentLang;
use App\Blog;
use App\BlogCategory;
use App\ContactInfoItem;
use App\Counterup;
use App\CourseInstructorLang;
use App\CourseLang;
use App\CourseLessionLang;
use App\CoursesCategoryLang;
use App\Donation;
use App\Events;
use App\EventsCategory;
use App\Faq;
use App\HeaderSlider;
use App\Jobs;
use App\JobsCategory;
use App\KeyFeatures;
use App\Knowledgebase;
use App\KnowledgebaseTopic;
use App\Language;
use App\Menu;
use App\Page;
use App\PopupBuilder;
use App\PricePlan;
use App\ProductCategory;
use App\Products;
use App\ProductShipping;
use App\ServiceCategory;
use App\Services;
use App\SocialIcons;
use App\StaticOption;
use App\TeamMember;
use App\Testimonial;
use App\Widgets;
use App\Works;
use App\WorksCategory;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Artisan;
class LanguageController extends Controller
{
public function __construct()
{
$this->middleware('auth:admin');
}
public function index(){
$all_lang = Language::all();
return view('backend.languages.index')->with([
'all_lang' => $all_lang
]);
}
public function store(Request $request){
$this->validate($request,[
'name' => 'required|string:max:191',
'direction' => 'required|string:max:191',
'slug' => 'required|string:max:191',
'status' => 'required|string:max:191',
]);
Language::create([
'name' => $request->name,
'direction' => $request->direction,
'slug' => $request->slug,
'status' => $request->status,
'default' => 0
]);
//generate admin panel string
$backend_default_lang_data = file_get_contents(resource_path('lang') . '/backend_default.json');
file_put_contents(resource_path('lang/') . $request->slug . '_backend.json', $backend_default_lang_data);
//generate frontend sting
$frontend_default_lang_data = file_get_contents(resource_path('lang') . '/frontend_default.json');
file_put_contents(resource_path('lang/') . $request->slug . '_frontend.json', $frontend_default_lang_data);
return redirect()->back()->with([
'msg' => __('New Language Added Success...'),
'type' => 'success'
]);
}
public function backend_edit_words($slug)
{
if (!file_exists(resource_path('lang/') . $slug . '_backend.json')){
$backend_default_lang_data = file_get_contents(resource_path('lang') . '/backend_default.json');
file_put_contents(resource_path('lang/') . $slug . '_backend.json', $backend_default_lang_data);
}
$all_word = file_get_contents(resource_path('lang/') . $slug . '_backend.json');
return view('backend.languages.edit-words')->with([
'all_word' => json_decode($all_word),
'lang_slug' => $slug,
'type' => 'backend',
'language' => Language::where('slug',$slug)->first()
]);
}
public function frontend_edit_words($slug)
{
if (!file_exists(resource_path('lang/') . $slug . '_frontend.json')){
$frontend_default_lang_data = file_get_contents(resource_path('lang') . '/frontend_default.json');
file_put_contents(resource_path('lang/') .$slug . '_frontend.json', $frontend_default_lang_data);
}
$all_word = file_get_contents(resource_path('lang/') . $slug . '_frontend.json');
return view('backend.languages.edit-words')->with([
'all_word' => json_decode($all_word),
'lang_slug' => $slug,
'type' => 'frontend',
'language' => Language::where('slug',$slug)->first()
]);
}
public function update_words(Request $request,$slug){
$this->validate($request,[
'type' => 'required',
'string_key' => 'required',
'translate_word' => 'required',
],[
'type.required' => __('type is missing'),
'string_key.required' => __('select source text'),
'translate_word.required' => __('add translate text'),
]);
//todo get text json file
//todo get current key index and replace it in the json file
if (file_exists(resource_path('lang/') . $slug . '_'.$request->type.'.json')) {
$default_lang_data = file_get_contents(resource_path('lang') . '/'.$slug . '_'.$request->type.'.json');
$default_lang_data = (array)json_decode($default_lang_data);
$default_lang_data[$request->string_key] = $request->translate_word;
$default_lang_data = (object)$default_lang_data;
$default_lang_data = json_encode($default_lang_data);
file_put_contents(resource_path('lang/') . $slug . '_'.$request->type.'.json', $default_lang_data);
}
return back()->with(['msg' => __('Words Change Success'), 'type' => 'success']);
}
public function update(Request $request){
$this->validate($request, [
'name' => 'required|string:max:191',
'direction' => 'required|string:max:191',
'status' => 'required|string:max:191',
'slug' => 'required|string:max:191'
]);
$old_lang = Language::find($request->id);
$old_slug = $old_lang->slug;
Language::where('id', $request->id)->update([
'name' => $request->name,
'direction' => $request->direction,
'status' => $request->status,
'slug' => $request->slug
]);
if ($old_lang != $request->slug){
$all_models = [
'Blog',
'BlogCategory',
'ContactInfoItem',
'Counterup',
'Donation',
'Events',
'EventsCategory',
'Faq',
'HeaderSlider',
'ImageGallery',
'ImageGalleryCategory',
'Jobs',
'JobsCategory',
'KeyFeatures',
'Knowledgebase',
'KnowledgebaseTopic',
'Menu',
'Page',
'PopupBuilder',
'PricePlan',
'PricePlanCategory',
'ProductCategory',
'ProductShipping',
'Products',
'ServiceCategory',
'Services',
'TeamMember',
'Testimonial',
'Works',
'WorksCategory',
];
foreach ($all_models as $model){
$calss_name = 'App\\'.$model;
$instance = new $calss_name();
$all_posts = $instance->where('lang',$old_slug )->get();
foreach ($all_posts as $post){
$instance->where('id',$post->id)->update(['lang' => $request->slug]);
}
}
$search_term = '_' . $old_slug . '_';
$all_static_option = StaticOption::where('option_name', 'regexp', $search_term)->get();
foreach ($all_static_option as $option) {
$option_name = str_replace($search_term, '_' . $request->slug . '_', $option->option_name);
\Illuminate\Support\Facades\Cache::forget($option_name);
StaticOption::find($option->id)->update(['option_name' => $option_name]);
}
}
$backend_lang_file_path = resource_path('lang/') . $old_slug .'_backend.json';
$frontend_lang_file_path = resource_path('lang/') . $old_slug .'_frontend.json';
if (!file_exists($backend_lang_file_path)){
file_put_contents(resource_path('lang/') . $request->slug . '_backend.json', file_get_contents(resource_path('lang/').'backend_default.json'));
}
if (!file_exists($frontend_lang_file_path)){
file_put_contents(resource_path('lang/') . $request->slug .'_frontend.json', file_get_contents(resource_path('lang/').'frontend_default.json'));
}
return redirect()->back()->with([
'msg' => __('Language Update Success...'),
'type' => 'success'
]);
}
public function delete(Request $request, $id){
$lang = Language::find($id);
$search_term = '_' . $lang->slug . '_';
$all_static_option = StaticOption::where('option_name', 'regexp', $search_term)->get();
foreach ($all_static_option as $option) {
StaticOption::find($option->id)->delete();
}
HeaderSlider::where('lang',$lang->slug)->delete();
KeyFeatures::where('lang',$lang->slug)->delete();
ContactInfoItem::where('lang',$lang->slug)->delete();
ServiceCategory::where('lang',$lang->slug)->delete();
Services::where('lang',$lang->slug)->delete();
WorksCategory::where('lang',$lang->slug)->delete();
Works::where('lang',$lang->slug)->delete();
Faq::where('lang',$lang->slug)->delete();
PricePlan::where('lang',$lang->slug)->delete();
TeamMember::where('lang',$lang->slug)->delete();
Testimonial::where('lang',$lang->slug)->delete();
Counterup::where('lang',$lang->slug)->delete();
BlogCategory::where('lang',$lang->slug)->delete();
Blog::where('lang',$lang->slug)->delete();
Menu::where('lang',$lang->slug)->delete();
Page::where('lang',$lang->slug)->delete();
EventsCategory::where('lang',$lang->slug)->delete();
Events::where('lang',$lang->slug)->delete();
KnowledgebaseTopic::where('lang',$lang->slug)->delete();
Knowledgebase::where('lang',$lang->slug)->delete();
Products::where('lang',$lang->slug)->delete();
ProductCategory::where('lang',$lang->slug)->delete();
ProductShipping::where('lang',$lang->slug)->delete();
JobsCategory::where('lang',$lang->slug)->delete();
Jobs::where('lang',$lang->slug)->delete();
Donation::where('lang',$lang->slug)->delete();
CourseLang::where('lang',$lang->slug)->delete();
CourseInstructorLang::where('lang',$lang->slug)->delete();
CourseLessionLang::where('lang',$lang->slug)->delete();
CoursesCategoryLang::where('lang',$lang->slug)->delete();
AppointmentLang::where('lang',$lang->slug)->delete();
AppointmentCategoryLang::where('lang',$lang->slug)->delete();
PopupBuilder::where('lang',$lang->slug)->delete();
if (file_exists(resource_path('lang/') . $lang->slug . '_backend.json')){
unlink(resource_path('lang/') . $lang->slug . '_backend.json');
}
if (file_exists(resource_path('lang/') . $lang->slug . '_frontend.json')){
unlink(resource_path('lang/') . $lang->slug . '_frontend.json');
}
$lang->delete();
return redirect()->back()->with([
'msg' => __('Language Delete Success...'),
'type' => 'danger'
]);
}
public function add_new_words(Request $request){
// return $request;
$this->validate($request,[
'lang_slug' => 'required|string',
'new_string' => 'required|string',
'translate_string' => 'required|string',
]);
if (file_exists(resource_path('lang/') . $request->lang_slug .'_'.$request->type. '.json')){
$default_lang_data = file_get_contents(resource_path('lang').'/'.$request->lang_slug.'_'.$request->type.'.json');
$default_lang_data = (array) json_decode($default_lang_data);
$default_lang_data[$request->new_string] = $request->translate_string;
$default_lang_data = (object) $default_lang_data;
$default_lang_data = json_encode($default_lang_data);
file_put_contents(resource_path('lang/') . $request->lang_slug .'_'.$request->type. '.json', $default_lang_data);
}
return back()->with(['msg' => __('New Word Added'),'type' => 'success']);
}
public function clone_languages(Request $request)
{
$this->validate($request, [
'id' => 'required',
'name' => 'required|string',
'direction' => 'required|string',
'status' => 'required|string',
'slug' => 'required|string',
]);
$clone_lang = Language::find($request->id);
Language::create([
'name' => $request->name,
'direction' => $request->direction,
'slug' => $request->slug,
'status' => $request->status,
'default' => 0
]);
$search_term = '_' . $clone_lang->slug . '_';
$all_static_option = StaticOption::where('option_name', 'regexp', $search_term)->get();
foreach ($all_static_option as $option) {
$option_name = str_replace($search_term, '_' . $request->slug . '_', $option->option_name);
StaticOption::updateOrCreate(
[ 'option_name' => $option_name],
[
'option_name' => $option_name,
'option_value' => $option->option_value
]);
}
$header_slider = HeaderSlider::where('lang', $clone_lang->slug)->get();
foreach ($header_slider as $data){
HeaderSlider::create([
'title' => $data->title,
'description' => $data->description,
'btn_01_status' => $data->btn_01_status,
'btn_01_text' => $data->btn_01_text,
'btn_01_url' => $data->btn_01_url,
'lang' => $request->slug,
'image' => $data->image,
]);
}
$key_features = KeyFeatures::where('lang', $clone_lang->slug)->get();
foreach ($key_features as $data){
KeyFeatures::create([
'title' => $data->title,
'icon' => $data->icon,
'image' => $data->image,
'description' => $data->description,
'lang' => $request->slug
]);
}
$contact_info = ContactInfoItem::where('lang', $clone_lang->slug)->get();
foreach ($contact_info as $data){
ContactInfoItem::create([
'title' => $data->title,
'lang' => $request->slug,
'icon' => $data->icon,
'description' => $data->description
]);
}
$pages = Page::where('lang', $clone_lang->slug)->get();
foreach ($pages as $data){
Page::create([
'title' => $data->title,
'content' => $data->content,
'status' => $data->status,
'meta_description' => $data->meta_description,
'meta_tags' => $data->meta_tags,
'slug' => $data->slug.'-'.$request->slug,
'lang' => $request->slug,
]);
}
$menus = Menu::where('lang', $clone_lang->slug)->get();
foreach ($menus as $data){
$menu_content = $data->content;
$menu_content = str_replace($search_term,'_'.$request->slug.'_',$menu_content);
Menu::create([
'title' => $data->title,
'lang' => $request->slug,
'content' => $menu_content,
'status' => $data->status
]);
}
//generate admin panel string
$backend_default_lang_data = file_get_contents(resource_path('lang') . '/'.$clone_lang->slug.'_backend.json');
file_put_contents(resource_path('lang/') . $request->slug . '_backend.json', $backend_default_lang_data);
//generate frontend sting
$frontend_default_lang_data = file_get_contents(resource_path('lang') . '/'.$clone_lang->slug.'_frontend.json');
file_put_contents(resource_path('lang/') . $request->slug . '_frontend.json', $frontend_default_lang_data);
return redirect()->back()->with([
'msg' => __('Language clone success with content...'),
'type' => 'success'
]);
}
public function regenerate_source_text(Request $request){
//
$this->validate($request,[
'slug' => 'required',
'type' => 'required'
]);
if (file_exists(resource_path('lang/') . $request->slug .'_'.$request->type. '.json')){
@unlink(resource_path('lang/') . $request->slug . '_'.$request->type. '.json');
}
Artisan::call('translatable:export '.$request->slug .'_'.$request->type);
return back()->with(['msg' => __('Source text generate success'), 'type' => 'success']);
}
public function make_default(Request $request, $id){
Language::where('default' ,1)->update(['default' => 0]);
Language::find($id)->update(['default' => 1]);
$lang = Language::find($id);
$lang->default = 1;
$lang->status = 'publish';
$lang->save();
session()->put('lang',$lang->slug);
return redirect()->back()->with([
'msg' => __('Default Language Set To').' '.$lang->name,
'type' => 'success'
]);
}
public function add_new_string(Request $request)
{
$this->validate($request, [
'slug' => 'required',
'string' => 'required',
'translate_string' => 'required',
]);
if (file_exists(resource_path('lang/') . $request->slug . '_' . $request->type . '.json')) {
$default_lang_data = file_get_contents(resource_path('lang') . '/' . $request->slug . '_' . $request->type . '.json');
$default_lang_data = (array) json_decode($default_lang_data);
$default_lang_data[$request->string] = $request->translate_string;
$default_lang_data = (object) $default_lang_data;
$default_lang_data = json_encode($default_lang_data);
file_put_contents(resource_path('lang/') . $request->slug . '_' . $request->type . '.json', $default_lang_data);
}
return redirect()->back()->with([
'msg' => __('new translated string added..'),
'type' => 'success'
]);
}
}