1359 lines
60 KiB
PHP
1359 lines
60 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace App\Http\Controllers;
|
||
|
|
||
|
use App\Helpers\BibClass;
|
||
|
use App\Http\Controllers\Controller;
|
||
|
use Exception;
|
||
|
use Illuminate\Http\Request;
|
||
|
use Illuminate\Support\Facades\DB;
|
||
|
use stdClass;
|
||
|
|
||
|
class GeneralFormController extends Controller
|
||
|
{
|
||
|
protected static $imageFields;
|
||
|
protected static $textEditorFields;
|
||
|
protected static $textAreaFields;
|
||
|
protected static $dateFields;
|
||
|
protected static $passwordFields;
|
||
|
protected static $HiddenCols;
|
||
|
public function __construct()
|
||
|
{
|
||
|
$this->initializeFields();
|
||
|
}
|
||
|
|
||
|
protected function initializeFields()
|
||
|
{
|
||
|
self::$imageFields = array(
|
||
|
'image',
|
||
|
'logo',
|
||
|
'signature',
|
||
|
'cover_photo',
|
||
|
'featured_image',
|
||
|
'image_thumb',
|
||
|
'primary_logo',
|
||
|
'secondary_logo',
|
||
|
'thumb_image',
|
||
|
'thumb',
|
||
|
'cover',
|
||
|
'photo',
|
||
|
'passport_copy',
|
||
|
'icon',
|
||
|
'favicon',
|
||
|
'og_image',
|
||
|
'no_image'
|
||
|
);
|
||
|
self::$textEditorFields = array('details', 'description', 'text', 'qualification', 'experience', 'required_documents', 'biodata', 'privacy_policy', 'content1', 'content2', 'content3');
|
||
|
self::$textAreaFields = array('copyright', 'remarks', 'seo_keywords', 'seo_description', 'seo_descriptions', 'intro', 'meta_tags', 'google_map', 'og_tags');
|
||
|
self::$dateFields = array('dob', 'postedon', 'valid_till', 'startdate', 'enddate', 'from', 'to', 'starts', 'ends');
|
||
|
self::$passwordFields = array('password');
|
||
|
self::$HiddenCols = array("createdby", "updatedby", "updated_at", "created_at", "status", "alias", "display_order", "is_main", 'email_verified_at');
|
||
|
}
|
||
|
|
||
|
protected function getImageFields()
|
||
|
{
|
||
|
return $this->imageFields;
|
||
|
}
|
||
|
|
||
|
protected function gettextEditorFields()
|
||
|
{
|
||
|
return $this->textEditorFields;
|
||
|
}
|
||
|
|
||
|
public function create()
|
||
|
{
|
||
|
$tables = DB::select('SHOW TABLES');
|
||
|
try {
|
||
|
$databasdeName = DB::connection()->getDatabaseName();
|
||
|
$allTables = [];
|
||
|
foreach ($tables as $table) {
|
||
|
|
||
|
$table_field = "Tables_in_$databasdeName";
|
||
|
// dd($table->$table_field);
|
||
|
if(strpos($table->$table_field,"_logs")){continue;}
|
||
|
$allTables[$table->$table_field] = $table->$table_field;
|
||
|
}
|
||
|
return view('crud.form.create', compact('allTables'));
|
||
|
} catch (Exception $e) {
|
||
|
dd($e->getMessage());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
public function store(Request $request)
|
||
|
{
|
||
|
// dd($request->all());
|
||
|
$request->validate([
|
||
|
'type' => 'required',
|
||
|
'tableName' => 'required',
|
||
|
]);
|
||
|
|
||
|
$name = trim($request->type);
|
||
|
$command = $name;
|
||
|
|
||
|
$tableName = trim($request->tableName);
|
||
|
$directoryName = trim($request->directoryName);
|
||
|
|
||
|
switch ($command) {
|
||
|
case 'dictonary':
|
||
|
$data['tableName'] = "tbl_dictonary";
|
||
|
if ($tableName != "") {
|
||
|
switch ($tableName) {
|
||
|
case 'add':
|
||
|
$data['TableCols'] = DB::select("describe " . $data['tableName']);
|
||
|
return view("crud.settings.dictonary/add", $data);
|
||
|
default:
|
||
|
$data['TableRows'] = DB::select("select * from " . $data['tableName']);
|
||
|
return view("crud.settings.dictonary.list", $data);
|
||
|
}
|
||
|
}
|
||
|
$data['TableName'] = "tbl_dictonary";
|
||
|
$data['TableRows'] = DB::select("select * from " . $data['TableName']);
|
||
|
return view("crud.settings.dictonary", $data);
|
||
|
|
||
|
|
||
|
|
||
|
case 'curd':
|
||
|
$data['tableName'] = $tableName;
|
||
|
$data['directoryName'] = $directoryName;
|
||
|
return view("crud.settings.curd", $data);
|
||
|
break;
|
||
|
case 'ajax-curd':
|
||
|
$data['tableName'] = $tableName;
|
||
|
$data['directoryName'] = $directoryName;
|
||
|
$columns = DB::select("describe $tableName"); // users table
|
||
|
return view("crud.settings.ajax-curd", $data);
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
|
||
|
return view("crud.settings.home");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function getTableNullablecreate()
|
||
|
{
|
||
|
return view("crud.settings.ajax-curd");
|
||
|
}
|
||
|
|
||
|
public function tables()
|
||
|
{
|
||
|
$AllTables = DB::select('SHOW TABLES');
|
||
|
try {
|
||
|
$databasdeName = DB::connection()->getDatabaseName();
|
||
|
$allTables = [];
|
||
|
foreach ($AllTables as $table) {
|
||
|
$myTable = new stdClass;
|
||
|
//$allTables[]=$table['Tables_in_'.$databasdeName];
|
||
|
$key = "Tables_in_" . $databasdeName;
|
||
|
$table->columns = DB::select("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" . $table->$key . "'");
|
||
|
$myTable->tablename = $table->$key;
|
||
|
$myTable->tablecolumns = $table->columns;
|
||
|
$allTables[] = $myTable;
|
||
|
}
|
||
|
return view('crud.form.tables', compact('allTables'));
|
||
|
} catch (Exception $e) {
|
||
|
dd($e->getMessage());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static function getForeignTable($all_columns)
|
||
|
{
|
||
|
$string = '_id';
|
||
|
$foreign = [];
|
||
|
foreach ($all_columns as $key => $column) {
|
||
|
if (str_contains($column, $string) !== FALSE) { // Yoshi version
|
||
|
$foreign[] = $column;
|
||
|
}
|
||
|
}
|
||
|
unset($foreign[0]);
|
||
|
$strArray = [];
|
||
|
foreach ($foreign as $key => $foreignKey) {
|
||
|
$strArray[$key] = explode('_id', $foreignKey);
|
||
|
unset($strArray[$key][1]);
|
||
|
}
|
||
|
if ($strArray) {
|
||
|
$all_Foreign_Key_Table = call_user_func_array('array_merge', $strArray);
|
||
|
foreach ($all_Foreign_Key_Table as $column) {
|
||
|
$tableName[] = "tbl_" . $column;
|
||
|
}
|
||
|
return $tableName;
|
||
|
} else {
|
||
|
return [];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static function getTableColumns($TableName)
|
||
|
{
|
||
|
return array_column(DB::select("SHOW COLUMNS FROM $TableName"), 'Field');
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
public static function ajaxShowContent($TableName, $directoryName)
|
||
|
{
|
||
|
$TableName = strtolower($TableName);
|
||
|
$TableCols = DB::select("describe " . $TableName);
|
||
|
$TableRows = DB::select("select * from " . $TableName);
|
||
|
$folder = '';
|
||
|
$routeName = '';
|
||
|
if (!empty($directoryName)) {
|
||
|
$folder .= strtolower($directoryName) . '/';
|
||
|
$routeName .= strtolower($directoryName) . '.';
|
||
|
}
|
||
|
$routeName .= strtolower(str_replace("tbl_", "", $TableName));
|
||
|
$folder .= str_replace("tbl_", "", $TableName);
|
||
|
$Table_pk = str_replace("tbl_", "", $TableName) . "_id";
|
||
|
$title = ucwords(str_replace("tbl_", "", $TableName));
|
||
|
$showContent = "
|
||
|
|
||
|
|
||
|
";
|
||
|
|
||
|
foreach ($TableCols as $key => $TableCol):
|
||
|
$TableCol = $TableCol->Field;
|
||
|
if ($key == 0 || $TableCol == 'createdOn' || $TableCol == 'createdBy' || $TableCol == 'updatedBy' || $TableCol == 'created_at' || $TableCol == 'updated_at')
|
||
|
continue;
|
||
|
$TableColLabel = ucwords(str_replace("_", " ", $TableCol));
|
||
|
if ($TableCol == 'status')
|
||
|
$showContent .= "<p><b>Status : </b> <span
|
||
|
class=\"{{\$data->$TableCol == 1 ? 'text-success' : 'text-danger'}}\">{{\$data->$TableCol == 1 ? 'Active' : 'Inactive'}}</span></p>";
|
||
|
else
|
||
|
$showContent .= '<p><b>' . $TableColLabel . " : </b> <span>{{\$data->$TableCol}}</span></p>";
|
||
|
|
||
|
endforeach;
|
||
|
$showContent .= "<div class=\"d-flex justify-content-between\">
|
||
|
<div>
|
||
|
<p><b>Created On :</b> <span>{{\$data->created_at}}</span></p>
|
||
|
<p><b>Created By :</b> <span>{{\$data->createdBy}}</span></p>
|
||
|
</div>
|
||
|
<div>
|
||
|
<p><b>Updated On :</b> <span>{{\$data->updated_at}}</span></p>
|
||
|
<p><b>Updated By :</b> <span>{{\$data->updatedBy}}</span></p>
|
||
|
|
||
|
</div>
|
||
|
</div>
|
||
|
";
|
||
|
|
||
|
return $showContent;
|
||
|
}
|
||
|
public static function ajaxEditContent($TableName, $directoryName)
|
||
|
{
|
||
|
$TableName = strtolower($TableName);
|
||
|
$TableCols = DB::select("describe " . $TableName);
|
||
|
$TableRows = DB::select("select * from " . $TableName);
|
||
|
$folder = '';
|
||
|
$routeName = '';
|
||
|
if (!empty($directoryName)) {
|
||
|
$folder .= strtolower($directoryName) . '/';
|
||
|
$routeName .= strtolower($directoryName) . '.';
|
||
|
}
|
||
|
$routeName .= strtolower(str_replace("tbl_", "", $TableName));
|
||
|
$folder .= str_replace("tbl_", "", $TableName);
|
||
|
|
||
|
$title = ucwords(str_replace("tbl_", "", $TableName));
|
||
|
|
||
|
$all_columns = self::getTableColumns($TableName);
|
||
|
$Table_pk = $all_columns[0];
|
||
|
$all_foreign_table = self::getForeignTable($all_columns);
|
||
|
$all_foreignKey = [];
|
||
|
if ($all_foreign_table)
|
||
|
foreach ($all_foreign_table as $key => $tablename) {
|
||
|
$all_foreignKey[$tablename] = self::getTableColumns($tablename);
|
||
|
$all_foreignKey[$tablename] = $all_foreignKey[$tablename][0] ?? null;
|
||
|
}
|
||
|
|
||
|
|
||
|
$editContent = "
|
||
|
<form action=\"{{\$editable?route('$routeName.update',[\$data->$Table_pk]):route('$routeName.store')}}\" id=\"updateCustomForm\" method=\"POST\" >\n @csrf ";
|
||
|
$editContent .= "<input type=hidden name='" . $Table_pk . "' value='{{\$editable?\$data->" . $Table_pk . ":''}}'/>" . PHP_EOL;
|
||
|
$editContent .= '<div class="row">';
|
||
|
foreach ($TableCols as $key => $TableCol):
|
||
|
|
||
|
$TableCol = $TableCol->Field;
|
||
|
if (!in_array($TableCol, self::$HiddenCols)) {
|
||
|
$TableColLabel = ucwords(str_replace("_", " ", $TableCol));
|
||
|
|
||
|
switch ($TableCol) {
|
||
|
case $TableCols[0]->Field:
|
||
|
break;
|
||
|
|
||
|
case (strpos($TableCol, "parent_") !== false):
|
||
|
$editContent .= '<div class="col-lg-6">';
|
||
|
$editContent .= "{{createCustomSelect('$TableName', 'title', '" . $TableCols[0]->Field . "', \$editable?\$data->$TableCol:'', '" . $TableColLabel . "','$TableCol', 'form-control select2','status<>-1')}}";
|
||
|
$editContent .= "</div>";
|
||
|
break;
|
||
|
case (strpos($TableCol, "s_id") !== false): //CASE TO HANDLE FOREIGN TABLE
|
||
|
$FTNameRaw = str_replace("s_id", "s", $TableCol);
|
||
|
$FTName = "tbl_" . str_replace("s_id", "s", $TableCol);
|
||
|
$FTCols = DB::select("describe " . $FTName);
|
||
|
$editContent .= '<div class="col-lg-6">';
|
||
|
//createCustomSelect($tableName, $fieldNameToDisplay, $fieldNameForValue, $defaultValueSelected, $displayTextForLabel, $HTMLElementName, $additionalClass = "form-control", $defaultCondition = null)
|
||
|
$editContent .= "{{createCustomSelect('$FTName', 'title', '" . $FTCols[0]->Field . "', \$editable?\$data->$TableCol:'', '" . $TableColLabel . "','$TableCol', 'form-control select2','status<>-1')}}";
|
||
|
$editContent .= "</div>";
|
||
|
break;
|
||
|
case (in_array($TableCol, self::$textEditorFields)):
|
||
|
$editContent .= '<div class="col-lg-12 pb-2">';
|
||
|
//function createTextArea($name, $class = "", $display = "", $default = "",$row = "")
|
||
|
$editContent .= "{{createTextarea(\"$TableCol\",\"$TableCol ckeditor-classic\",\"$TableColLabel\",\$editable?\$data->$TableCol:'')}}\n";
|
||
|
$editContent .= "</div>";
|
||
|
break;
|
||
|
case (in_array($TableCol, self::$imageFields)):
|
||
|
$editContent .= '<div class="col-lg-12 pb-2">';
|
||
|
$editContent .= "{{createImageInput(\"$TableCol\",\"$TableColLabel\",'',\$editable?\$data->$TableCol:'')}}\n";
|
||
|
$editContent .= "</div>";
|
||
|
break;
|
||
|
case (in_array($TableCol, self::$dateFields)):
|
||
|
$editContent .= '<div class="col-lg-6 pb-2">';
|
||
|
$editContent .= "{{createDate(\"$TableCol\",\"$TableColLabel\",'',\$editable?\$data->$TableCol:'')}}\n"; //createDate($name, $display = "",$class = "datepicker", $default = "")
|
||
|
$editContent .= "</div>";
|
||
|
break;
|
||
|
case (in_array($TableCol, self::$passwordFields)):
|
||
|
$editContent .= '<div class="col-lg-6 pb-2">';
|
||
|
$editContent .= "{{createPassword(\"$TableCol\",\"$TableColLabel\",'',\$editable?\$data->$TableCol:'')}}\n"; //createDate($name, $display = "",$class = "datepicker", $default = "")
|
||
|
$editContent .= "</div>";
|
||
|
break;
|
||
|
case (in_array($TableCol, self::$textAreaFields)):
|
||
|
$editContent .= '<div class="col-lg-12 pb-2">';
|
||
|
$editContent .= "{{createPlainTextArea(\"$TableCol\",'',\"$TableColLabel\",\$editable?\$data->$TableCol:'')}}\n"; //createDate($name, $display = "",$class = "datepicker", $default = "")
|
||
|
$editContent .= "</div>";
|
||
|
break;
|
||
|
default:
|
||
|
$editContent .= '<div class="col-lg-6">';
|
||
|
$editContent .= "{{createText(\"$TableCol\",\"$TableCol\",\"$TableColLabel\",'',\$editable?\$data->$TableCol:'')}}\n";
|
||
|
$editContent .= "</div>";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
endforeach;
|
||
|
$editContent .= ' <div class="col-md-12">';
|
||
|
$editContent .= "<?php createButton(\"btn-primary btn-update\",\"\",\"Submit\"); ?>\n";
|
||
|
$editContent .= "<?php createButton(\"btn-primary btn-cancel\",\"\",\"Cancel\",route('$routeName.index')); ?>\n";
|
||
|
$editContent .= "</div>";
|
||
|
$editContent .= " </form>";
|
||
|
|
||
|
|
||
|
|
||
|
return $editContent;
|
||
|
} //end of ajaxEditContent method
|
||
|
public static function editContent($TableName, $directoryName)
|
||
|
{
|
||
|
$TableName = strtolower($TableName);
|
||
|
$TableCols = DB::select("describe " . $TableName);
|
||
|
$TableRows = DB::select("select * from " . $TableName);
|
||
|
$folder = '';
|
||
|
$routeName = '';
|
||
|
if (!empty($directoryName)) {
|
||
|
$folder .= strtolower($directoryName) . '/';
|
||
|
$routeName .= strtolower($directoryName) . '.';
|
||
|
}
|
||
|
$routeName .= strtolower(str_replace("tbl_", "", $TableName));
|
||
|
$folder .= str_replace("tbl_", "", $TableName);
|
||
|
$Table_pk = str_replace("tbl_", "", $TableName) . "_id";
|
||
|
$title = ucwords(str_replace("tbl_", "", $TableName));
|
||
|
$editContent = "@extends('backend.template')
|
||
|
@section('content')
|
||
|
<div class='card'>
|
||
|
<div class='card-header d-flex justify-content-between align-items-center'>
|
||
|
<h2 class=\"\">{{ label('Edit $title') }}</h2>
|
||
|
<?php createButton(\"btn-primary btn-cancel\",\"\",\"Cancel\",route('$routeName.index')); ?>\n
|
||
|
</div>
|
||
|
<div class='card-body'>";
|
||
|
$editContent .= self::ajaxEditContent($TableName, $directoryName);
|
||
|
$editContent .= "</div></div>\n@endsection";
|
||
|
$path = base_path() . "/resources/views/crud/generated/$folder/";
|
||
|
$file = $path . "edit.blade.php";
|
||
|
if (!file_exists("$path")) {
|
||
|
mkdir("$path", 0777, true);
|
||
|
}
|
||
|
if (!file_exists($file)) {
|
||
|
$file = fopen($file, 'w');
|
||
|
fwrite($file, $editContent);
|
||
|
fclose($file);
|
||
|
}
|
||
|
|
||
|
return $editContent;
|
||
|
} //end of editContent method
|
||
|
|
||
|
public static function addContent($TableName, $directoryName)
|
||
|
{
|
||
|
$TableName = strtolower($TableName);
|
||
|
$TableCols = DB::select("describe " . $TableName);
|
||
|
$TableRows = DB::select("select * from " . $TableName);
|
||
|
$folder = '';
|
||
|
$routeName = '';
|
||
|
if (!empty($directoryName)) {
|
||
|
$folder .= strtolower($directoryName) . '/';
|
||
|
$routeName .= strtolower($directoryName) . '.';
|
||
|
}
|
||
|
$routeName .= strtolower(str_replace("tbl_", "", $TableName));
|
||
|
$folder .= str_replace("tbl_", "", $TableName);
|
||
|
$Table_pk = str_replace("tbl_", "", $TableName) . "_id";
|
||
|
$title = ucwords(str_replace("tbl_", "", $TableName));
|
||
|
|
||
|
$addContent = "@extends('backend.template')
|
||
|
@section('content')
|
||
|
<div class='card'>
|
||
|
<div class='card-header d-flex justify-content-between align-items-center'>
|
||
|
<h2 class=\"\">{{ label('Add $title') }}</h2>
|
||
|
<?php createButton(\"btn-primary btn-cancel\",\"\",\"Cancel\",route('$routeName.index')); ?>\n
|
||
|
</div>
|
||
|
<div class='card-body'>";
|
||
|
$addContent .= self::ajaxEditContent($TableName, $directoryName);
|
||
|
$addContent .= "</div></div>\n@endsection";
|
||
|
$path = base_path() . "/resources/views/crud/generated/$folder/";
|
||
|
$file = $path . "edit.blade.php";
|
||
|
if (!file_exists("$path")) {
|
||
|
mkdir("$path", 0777, true);
|
||
|
}
|
||
|
if (!file_exists($file)) {
|
||
|
$file = fopen($file, 'w');
|
||
|
fwrite($file, $addContent);
|
||
|
fclose($file);
|
||
|
}
|
||
|
|
||
|
return $addContent;
|
||
|
} //End of addContent
|
||
|
/*
|
||
|
public static function ajaxAddContent($TableName, $directoryName)
|
||
|
{
|
||
|
$TableName = strtolower($TableName);
|
||
|
$TableCols = DB::select("describe " . $TableName);
|
||
|
$TableRows = DB::select("select * from " . $TableName);
|
||
|
$folder = '';
|
||
|
$routeName = '';
|
||
|
if (!empty($directoryName)) {
|
||
|
$folder .= strtolower($directoryName) . '/';
|
||
|
$routeName .= strtolower($directoryName) . '.';
|
||
|
}
|
||
|
$routeName .= strtolower(str_replace("tbl_", "", $TableName));
|
||
|
$folder .= str_replace("tbl_", "", $TableName);
|
||
|
$Table_pk = str_replace("tbl_", "", $TableName) . "_id";
|
||
|
$title = ucwords(str_replace("tbl_", "", $TableName));
|
||
|
|
||
|
$all_columns = self::getTableColumns($TableName);
|
||
|
$all_foreign_table = self::getForeignTable($all_columns);
|
||
|
$all_foreignKey = [];
|
||
|
if ($all_foreign_table)
|
||
|
foreach ($all_foreign_table as $key => $tablename) {
|
||
|
$all_foreignKey[$tablename] = self::getTableColumns($tablename);
|
||
|
$all_foreignKey[$tablename] = $all_foreignKey[$tablename][0] ?? null;
|
||
|
}
|
||
|
|
||
|
$addContent = "
|
||
|
<form action=\"{{\$editable?route('$routeName.update',[\$data->$Table_pk]):route('$routeName.store')}}\" id=\"storeCustomForm\" method=\"POST\">\n @csrf \n";
|
||
|
$addContent .= '<div class="row">';
|
||
|
foreach ($TableCols as $key => $TableCol):
|
||
|
$TableCol = $TableCol->Field;
|
||
|
if (!in_array($TableCol, self::$HiddenCols)) {
|
||
|
$TableColLabel = ucwords(str_replace("_", " ", $TableCol));
|
||
|
|
||
|
switch ($TableCol) {
|
||
|
case $TableCols[0]->Field:
|
||
|
break;
|
||
|
case (strpos($TableCol, "parent_") !== false):
|
||
|
$addContent .= '<div class="col-lg-6">';
|
||
|
$addContent .= "{{createCustomSelect('$TableName', 'title', '" . $TableCols[0]->Field . "', '', '" . $TableColLabel . "','$TableCol', 'form-control select2','status<>-1')}}";
|
||
|
$addContent .= "</div>";
|
||
|
break;
|
||
|
case (strpos($TableCol, "s_id") !== false): //CASE TO HANDLE FOREIGN TABLE
|
||
|
$FTNameRaw = str_replace("s_id", "s", $TableCol);
|
||
|
$FTName = "tbl_" . str_replace("s_id", "s", $TableCol);
|
||
|
$FTCols = DB::select("describe " . $FTName);
|
||
|
$addContent .= '<div class="col-lg-6">';
|
||
|
//createCustomSelect($tableName, $fieldNameToDisplay, $fieldNameForValue, $defaultValueSelected, $displayTextForLabel, $HTMLElementName, $additionalClass = "form-control", $defaultCondition = null)
|
||
|
$addContent .= "{{createCustomSelect('$FTName', 'title', '" . $FTCols[0]->Field . "', '', '" . $TableColLabel . "','$TableCol', 'form-control select2','status<>-1')}}";
|
||
|
$addContent .= "</div>";
|
||
|
break;
|
||
|
case (in_array($TableCol, self::$textEditorFields)):
|
||
|
$addContent .= '<div class="col-lg-12 pb-2">';
|
||
|
$addContent .= "{{createTextarea(\"$TableCol\",\"$TableCol ckeditor-classic\",\"$TableColLabel\")}}\n";
|
||
|
$addContent .= "</div>";
|
||
|
break;
|
||
|
case (in_array($TableCol, self::$textAreaFields)):
|
||
|
$addContent .= '<div class="col-lg-12 pb-2">';
|
||
|
$addContent .= "{{createPlainTextArea(\"$TableCol\",\"$TableCol \",\"$TableColLabel\")}}\n";
|
||
|
$addContent .= "</div>";
|
||
|
break;
|
||
|
case (in_array($TableCol, self::$imageFields)):
|
||
|
$addContent .= '<div class="col-lg-12 pb-2">';
|
||
|
$addContent .= "{{createImageInput(\"$TableCol\",\"$TableColLabel\")}}\n";
|
||
|
$addContent .= "</div>";
|
||
|
break;
|
||
|
case (in_array($TableCol, self::$dateFields)):
|
||
|
$addContent .= '<div class="col-lg-6 pb-2">';
|
||
|
$addContent .= "{{createDate(\"$TableCol\",\"$TableColLabel\",'',date('Y-m-d'))}}\n"; //createDate($name, $display = "",$class = "datepicker", $default = "")
|
||
|
$addContent .= "</div>";
|
||
|
break;
|
||
|
case (in_array($TableCol, self::$passwordFields)):
|
||
|
$addContent .= '<div class="col-lg-6 pb-2">';
|
||
|
$addContent .= "{{createPassword(\"$TableCol\",\"$TableColLabel\",'')}}\n"; //createDate($name, $display = "",$class = "datepicker", $default = "")
|
||
|
$addContent .= "</div>";
|
||
|
break;
|
||
|
default:
|
||
|
$addContent .= '<div class="col-lg-6">';
|
||
|
$addContent .= "{{createText(\"$TableCol\",\"$TableCol\",\"$TableColLabel\")}}\n";
|
||
|
$addContent .= "</div>";
|
||
|
}
|
||
|
}
|
||
|
endforeach;
|
||
|
$addContent .= ' <br> <div class="col-md-12">';
|
||
|
$addContent .= "<?php createButton(\"btn-primary btn-store\",\"\",\"Submit\"); ?>\n";
|
||
|
$addContent .= "<?php createButton(\"btn-primary btn-cancel\",\"\",\"Cancel\",route('$routeName.index')); ?>\n";
|
||
|
$addContent .= "</div>";
|
||
|
$addContent .= " </form>";
|
||
|
|
||
|
|
||
|
return $addContent;
|
||
|
} //End of ajax addContent
|
||
|
*/
|
||
|
public static function showContent($TableName, $directoryName)
|
||
|
{
|
||
|
$TableName = strtolower($TableName);
|
||
|
$TableCols = DB::select("describe " . $TableName);
|
||
|
$TableRows = DB::select("select * from " . $TableName);
|
||
|
$folder = '';
|
||
|
$routeName = '';
|
||
|
if (!empty($directoryName)) {
|
||
|
$folder .= strtolower($directoryName) . '/';
|
||
|
$routeName .= strtolower($directoryName) . '.';
|
||
|
}
|
||
|
$routeName .= strtolower(str_replace("tbl_", "", $TableName));
|
||
|
$folder .= str_replace("tbl_", "", $TableName);
|
||
|
$Table_pk = str_replace("tbl_", "", $TableName) . "_id";
|
||
|
$title = ucwords(str_replace("tbl_", "", $TableName));
|
||
|
|
||
|
$showContent = "@extends('backend.template')
|
||
|
@section('content')
|
||
|
<div class='card'>
|
||
|
<div class='card-header d-flex justify-content-between align-items-center'>
|
||
|
<h2><?php echo label('View Details'); ?></h2>
|
||
|
<?php createButton(\"btn-primary btn-cancel\",\"\",\"Back to List\",route('$routeName.index')); ?>\n
|
||
|
</div>
|
||
|
<div class='card-body'>
|
||
|
";
|
||
|
$showContent .= self::ajaxShowContent($TableName, $directoryName);
|
||
|
$showContent .= "
|
||
|
</div>
|
||
|
</div>
|
||
|
|
||
|
@endSection";
|
||
|
|
||
|
$path = base_path() . "/resources/views/crud/generated/$folder/";
|
||
|
$file = $path . "show.blade.php";
|
||
|
if (!file_exists("$path")) {
|
||
|
mkdir("$path", 0777, true);
|
||
|
}
|
||
|
if (!file_exists($file)) {
|
||
|
$file = fopen($file, 'w');
|
||
|
fwrite($file, $showContent);
|
||
|
fclose($file);
|
||
|
}
|
||
|
return $showContent;
|
||
|
}
|
||
|
|
||
|
|
||
|
public static function migrationContent($tableName)
|
||
|
{
|
||
|
$tableName = strtolower($tableName);
|
||
|
$columns = self::getTableColumns($tableName);
|
||
|
$tableFields = DB::select("describe $tableName");
|
||
|
// foreach($tableFields as $tableField){
|
||
|
// dd($tableField->Field);
|
||
|
// }
|
||
|
$pkField = str_replace("tbl_", "", $tableName) . "_id";
|
||
|
//BibClass::pre($tableFields);
|
||
|
|
||
|
$contentString = "<?php\n
|
||
|
use Illuminate\Database\Migrations\Migration;\n
|
||
|
use Illuminate\Database\Schema\Blueprint;\n
|
||
|
use Illuminate\Support\Facades\Schema;\n
|
||
|
return new class extends Migration\n
|
||
|
{\n
|
||
|
public function up()\n
|
||
|
{\nSchema::create(\"$tableName\", function (Blueprint \$table) {\n";
|
||
|
foreach ($tableFields as $tableField) {
|
||
|
$Type = $tableField->Type;
|
||
|
//WRITE CODE HERE TO IDENTIFY THE TYPES OF FIELDS
|
||
|
switch ($Type) {
|
||
|
case 'int(11)':
|
||
|
if ($tableField->Field == $pkField):
|
||
|
$contentString .= "\$table->integer(\"$tableField->Field\")->autoIncrement();\n";
|
||
|
else:
|
||
|
$contentString .= "\$table->integer(\"$tableField->Field\")->default(0);\n";
|
||
|
endif;
|
||
|
break;
|
||
|
|
||
|
case 'varchar(255)':
|
||
|
$contentString .= "\$table->string(\"$tableField->Field\")->nullable();\n";
|
||
|
break;
|
||
|
|
||
|
case 'datetime':
|
||
|
$contentString .= "\$table->datetime(\"$tableField->Field\")->nullable();\n";
|
||
|
break;
|
||
|
|
||
|
case 'text':
|
||
|
$contentString .= "\$table->text(\"$tableField->Field\")->nullable();\n";
|
||
|
break;
|
||
|
case 'timestamp':
|
||
|
$contentString .= "\$table->text(\"$tableField->Field\")->nullable();\n";
|
||
|
break;
|
||
|
default:
|
||
|
}
|
||
|
}
|
||
|
$contentString .= "\$table->timestamps();\n });\n }\n public function down()\n {\n Schema::dropIfExists(\"$tableName\");\n }\n};";
|
||
|
/*
|
||
|
$file = fopen(base_path() . "/database/migrations/" . date('Y_m_d_his') . "_create_" . $tableName . "_table.php", 'w');
|
||
|
fwrite($file, $contentString);
|
||
|
fclose($file);
|
||
|
*/
|
||
|
return $contentString;
|
||
|
}
|
||
|
|
||
|
public static function routeContent($TableName, $directoryName)
|
||
|
{
|
||
|
$TableName = strtolower($TableName);
|
||
|
$TableName = str_replace("tbl_", "", $TableName);
|
||
|
$routePrefixName = '';
|
||
|
$ControllerName = '';
|
||
|
if (!empty($directoryName)) {
|
||
|
// $ControllerName .= ucwords($directoryName) . '/';
|
||
|
$routePrefixName .= strtolower($directoryName) . '.';
|
||
|
}
|
||
|
$ControllerName .= ucwords($TableName) . "Controller";
|
||
|
$routePrefixName .= strtolower($TableName);
|
||
|
|
||
|
$RouteContent = "Route::prefix(\"$TableName\")->group(function () {
|
||
|
Route::get('/', [$ControllerName::class, 'index'])->name('$routePrefixName.index');
|
||
|
Route::get('/create', [$ControllerName::class, 'create'])->name('$routePrefixName.create');
|
||
|
Route::post('/store', [$ControllerName::class, 'store'])->name('$routePrefixName.store');
|
||
|
Route::post('/sort', [$ControllerName::class, 'sort'])->name('$routePrefixName.sort');
|
||
|
Route::post('/updatealias', [$ControllerName::class, 'updatealias'])->name('$routePrefixName.updatealias');
|
||
|
Route::get('/show/{id}', [$ControllerName::class, 'show'])->name('$routePrefixName.show');
|
||
|
Route::get('/edit/{id}', [$ControllerName::class, 'edit'])->name('$routePrefixName.edit') ;
|
||
|
Route::post('/update/{id}', [$ControllerName::class, 'update'])->name('$routePrefixName.update');
|
||
|
Route::get('/destroy/{id}', [$ControllerName::class, 'destroy'])->name('$routePrefixName.destroy');
|
||
|
Route::get('/toggle/{id}', [$ControllerName::class, 'toggle'])->name('$routePrefixName.toggle');
|
||
|
Route::get('/clone/{id}', [$ControllerName::class, 'clone'])->name('$routePrefixName.clone');
|
||
|
});";
|
||
|
|
||
|
$path = base_path() . "/routes/CRUDgenerated/";
|
||
|
$file = $path . "route." . $routePrefixName . ".php";
|
||
|
if (!file_exists($path)) {
|
||
|
mkdir($path, 0777, true);
|
||
|
}
|
||
|
if (!file_exists($file)) {
|
||
|
$file = fopen($file, 'w');
|
||
|
fwrite($file, "<?php" . PHP_EOL);
|
||
|
$controllerNamespace = $directoryName ? "App\\Http\\Controllers\\$directoryName\\$ControllerName" : "App\\Http\\Controllers\\$ControllerName";
|
||
|
fwrite($file, "use $controllerNamespace;" . PHP_EOL);
|
||
|
fwrite($file, "use Illuminate\Support\Facades\Route;" . PHP_EOL);
|
||
|
fwrite($file, $RouteContent);
|
||
|
fclose($file);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
return $RouteContent;
|
||
|
}
|
||
|
|
||
|
public static function listContent($TableName, $directoryName)
|
||
|
{
|
||
|
$TableName = strtolower($TableName);
|
||
|
$TableCols = DB::select("describe " . $TableName);
|
||
|
$TableRows = DB::select("select * from " . $TableName);
|
||
|
$folder = '';
|
||
|
$routeName = '';
|
||
|
if (!empty($directoryName)) {
|
||
|
$folder .= strtolower($directoryName) . '/';
|
||
|
$routeName .= strtolower($directoryName) . '.';
|
||
|
}
|
||
|
$folder .= str_replace("tbl_", "", $TableName);
|
||
|
$Table_pk = str_replace("tbl_", "", $TableName) . "_id";
|
||
|
$title = ucwords(str_replace("tbl_", "", $TableName));
|
||
|
$routeName .= strtolower(str_replace("tbl_", "", $TableName)) . '.';
|
||
|
$columns = self::getTableColumns($TableName);
|
||
|
$primaryKey = $columns[0];
|
||
|
$tableFields = DB::select("describe $TableName");
|
||
|
$translated = label('' . $title);
|
||
|
$HiddenColumns = array($primaryKey, "remarks", "createdon", "createdby", "updatedby", "seo_title", "seo_descriptions", "seo_keywords", "google_map", "seo_description", "og_tags", "created_at", "updated_at", "description", "details", "text", "display_order", "status");
|
||
|
$listContent = '@extends(\'backend.template\')
|
||
|
@section(\'content\')
|
||
|
<div class="card">
|
||
|
<div class="card-header d-flex justify-content-between align-items-center">
|
||
|
<h2>{{ label("' . $title . ' List") }}</h2>
|
||
|
<a href="{{ route(\'' . $routeName . 'create\') }}" class="btn btn-primary"><span>{{label("Create New")}}</span></a>
|
||
|
</div>
|
||
|
<div class="card-body">
|
||
|
<table class="table dataTable" id="' . $TableName . '" data-url="{{ route(\'' . $routeName . 'sort\') }}">
|
||
|
<thead class="table-light">
|
||
|
<tr>
|
||
|
<th class="tb-col"><span class="overline-title">{{label("Sn.")}}</span></th>' . PHP_EOL;
|
||
|
|
||
|
foreach ($columns as $key => $column) {
|
||
|
|
||
|
if (!in_array($column, $HiddenColumns))
|
||
|
switch ($column) {
|
||
|
case (strpos($column, "parent_") !== false):
|
||
|
$listContent .= '<th class="tb-col"><span class="overline-title">{{ label("Parent") }}</span></th>' . PHP_EOL;
|
||
|
break;
|
||
|
case (strpos($column, "s_id") !== false):
|
||
|
$ParentName = str_replace("s_id", "s", $column);
|
||
|
$listContent .= '<th class="tb-col"><span class="overline-title">{{ label("' . $ParentName . '") }}</span></th>' . PHP_EOL;
|
||
|
break;
|
||
|
default:
|
||
|
$listContent .= '<th class="tb-col"><span class="overline-title">{{ label("' . $column . '") }}</span></th>' . PHP_EOL;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
$listContent .= '<th class="tb-col" data-sortable="false"><span
|
||
|
class="overline-title">{{ label("Action") }}</span>
|
||
|
</th>
|
||
|
</tr>
|
||
|
</thead>
|
||
|
<tbody>
|
||
|
@php
|
||
|
$i = 1;
|
||
|
@endphp
|
||
|
@foreach ($data as $item)
|
||
|
|
||
|
<tr data-id="{{$item->' . $columns[0] . '}}" data-display_order="{{$item->display_order}}" class="draggable-row <?php echo ($item->status==0)?"bg-light bg-danger":""; ?>">
|
||
|
<td class="tb-col">{{ $i++ }}</td>';
|
||
|
foreach ($columns as $key => $column) {
|
||
|
if (!in_array($column, $HiddenColumns)) {
|
||
|
|
||
|
switch ($column) {
|
||
|
case (strpos($column, "parent_") !== false):
|
||
|
$listContent .= '<td class="tb-col">' . PHP_EOL;
|
||
|
$listContent .= '{!! getFieldData("' . $TableName . '", "title", "' . $columns[0] . '", $item->' . $column . ') !!}' . PHP_EOL;
|
||
|
$listContent .= '</td>' . PHP_EOL;
|
||
|
break;
|
||
|
case (strpos($column, "s_id") !== false): //CASE TO HANDLE FOREIGN TABLE
|
||
|
$FTNameRaw = str_replace("s_id", "s", $column);
|
||
|
$FTName = "tbl_" . str_replace("s_id", "s", $column);
|
||
|
$FTCols = DB::select("describe " . $FTName);
|
||
|
$listContent .= '<td class="tb-col">' . PHP_EOL;
|
||
|
//function getFieldData($tableName, $returnField, $referenceFieldName, $referenceValue)
|
||
|
$listContent .= '{!! getFieldData("' . $FTName . '", "title", "' . $FTCols[0]->Field . '", $item->' . $column . ') !!}' . PHP_EOL;
|
||
|
$listContent .= "</td>";
|
||
|
break;
|
||
|
case 'alias':
|
||
|
$listContent .= '<td class="tb-col">
|
||
|
<div class="alias-wrapper" data-id="{{$item->' . $columns[0] . '}}">
|
||
|
<span class="alias">{{ $item->alias }}</span>
|
||
|
<input type="text" class="alias-input d-none" value="{{ $item->alias }}" id="alias_{{$item->' . $columns[0] . '}}" />
|
||
|
</div>
|
||
|
<span class="badge badge-soft-primary change-alias-badge">change alias</span>
|
||
|
</td>' . PHP_EOL;
|
||
|
break;
|
||
|
case (in_array($column, self::$imageFields)):
|
||
|
$listContent .= '<td class="tb-col">{{ showImageThumb($item->' . $column . ') }}</td>' . PHP_EOL;
|
||
|
break;
|
||
|
case (in_array($column, self::$dateFields)):
|
||
|
$listContent .= '<td class="tb-col">{{ myDate($item->' . $column . ') }}</td>' . PHP_EOL;
|
||
|
break;
|
||
|
case 'status':
|
||
|
$listContent .= '<td class="tb-col">{!! $item->status_name !!}</td>' . PHP_EOL;
|
||
|
break;
|
||
|
default:
|
||
|
$listContent .= '<td class="tb-col">{{ $item->' . $column . ' }}</td>' . PHP_EOL;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
$listContent .= '<td class="tb-col">
|
||
|
<div class="dropdown d-inline-block">
|
||
|
<button class="btn btn-soft-secondary btn-sm dropdown" type="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||
|
<i class="ri-more-fill align-middle"></i>
|
||
|
</button>
|
||
|
<ul class="dropdown-menu dropdown-menu-end">
|
||
|
<li><a href="{{route(' . "'" . $routeName . 'show' . "'" . ',[$item->' . $primaryKey . '])}}" class="dropdown-item"><i class="ri-eye-fill align-bottom me-2 text-muted"></i> {{label("View")}}</a></li>
|
||
|
<li><a href="{{route(' . "'" . $routeName . 'edit' . "'" . ',[$item->' . $primaryKey . '])}}" class="dropdown-item edit-item-btn"><i class="ri-pencil-fill align-bottom me-2 text-muted"></i> {{label("Edit")}}</a></li>
|
||
|
<li>
|
||
|
<a href="{{route(' . "'" . $routeName . 'toggle' . "'" . ',[$item->' . $primaryKey . '])}}" class="dropdown-item toggle-item-btn" onclick="confirmToggle(this.href)">
|
||
|
<i class="ri-article-fill align-bottom me-2 text-muted"></i> {{ ($item->status==1)?label(\'Unpublish\'):label(\'Publish\') }}
|
||
|
</a>
|
||
|
|
||
|
</li>
|
||
|
<li>
|
||
|
<a href="{{route(' . "'" . $routeName . 'clone' . "'" . ',[$item->' . $primaryKey . '])}}" class="dropdown-item toggle-item-btn" onclick="confirmClone(this.href)">
|
||
|
<i class="ri-file-copy-line align-bottom me-2 text-muted"></i> {{ label(\'Clone\') }}
|
||
|
</a>
|
||
|
|
||
|
</li>
|
||
|
<li>
|
||
|
<a href="{{route(' . "'" . $routeName . 'destroy' . "'" . ',[$item->' . $primaryKey . '])}}" class="dropdown-item remove-item-btn" onclick="confirmDelete(this.href)">
|
||
|
<i class="ri-delete-bin-fill align-bottom me-2 text-muted"></i> {{ label(\'Delete\') }}
|
||
|
</a>
|
||
|
|
||
|
</li>
|
||
|
</ul>
|
||
|
</div>
|
||
|
|
||
|
|
||
|
</td>
|
||
|
</tr>
|
||
|
|
||
|
@endforeach
|
||
|
|
||
|
</tbody>
|
||
|
</table>
|
||
|
|
||
|
|
||
|
</div>
|
||
|
</div>
|
||
|
|
||
|
@endsection
|
||
|
|
||
|
@push("css")
|
||
|
<link rel="stylesheet" href="https://cdn.datatables.net/1.13.5/css/dataTables.bootstrap4.min.css">
|
||
|
<link rel="stylesheet" href="https://cdn.datatables.net/rowreorder/1.4.0/css/rowReorder.dataTables.min.css">
|
||
|
@endpush
|
||
|
@push("js")
|
||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.68/pdfmake.min.js"></script>
|
||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.68/vfs_fonts.js"></script>
|
||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||
|
<script src="https://cdn.datatables.net/1.13.5/js/jquery.dataTables.min.js"></script>
|
||
|
<script src="https://cdn.datatables.net/buttons/2.4.1/js/buttons.html5.min.js"></script>
|
||
|
<script src="https://cdn.datatables.net/rowreorder/1.4.0/js/dataTables.rowReorder.min.js"></script>
|
||
|
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
||
|
|
||
|
|
||
|
<script>
|
||
|
$(document).ready(function(e) {
|
||
|
$(\'.change-alias-badge\').on(\'click\', function() {
|
||
|
var aliasWrapper = $(this).prev(\'.alias-wrapper\');
|
||
|
var aliasSpan = aliasWrapper.find(\'.alias\');
|
||
|
var aliasInput = aliasWrapper.find(\'.alias-input\');
|
||
|
var isEditing = $(this).hasClass(\'editing\');
|
||
|
aliasInput.toggleClass("d-none");
|
||
|
if (isEditing) {
|
||
|
// Update alias text and switch to non-editing state
|
||
|
var newAlias = aliasInput.val();
|
||
|
aliasSpan.text(newAlias);
|
||
|
aliasSpan.show();
|
||
|
aliasInput.hide();
|
||
|
$(this).removeClass(\'editing\').text(\'Change Alias\');
|
||
|
var articleId = $(aliasWrapper).data(\'id\');
|
||
|
var ajaxUrl = "{{ route(\'' . $routeName . 'updatealias\') }}";
|
||
|
var data = {
|
||
|
articleId: articleId,
|
||
|
newAlias: newAlias
|
||
|
};
|
||
|
|
||
|
$.ajax({
|
||
|
url: ajaxUrl,
|
||
|
type: \'POST\',
|
||
|
headers: {
|
||
|
\'X-CSRF-TOKEN\': $(\'meta[name="csrf-token"]\').attr(\'content\')
|
||
|
},
|
||
|
data: data,
|
||
|
success: function(response) {
|
||
|
console.log(response);
|
||
|
},
|
||
|
error: function(xhr, status, error) {
|
||
|
console.error(error);
|
||
|
}
|
||
|
});
|
||
|
} else {
|
||
|
// Switch to editing state
|
||
|
aliasSpan.hide();
|
||
|
aliasInput.show().focus();
|
||
|
$(this).addClass(\'editing\').text(\'Save Alias\');
|
||
|
}
|
||
|
});
|
||
|
var mytable = $(".dataTable").DataTable({
|
||
|
ordering: true,
|
||
|
rowReorder: {
|
||
|
//selector: \'tr\'
|
||
|
},
|
||
|
});
|
||
|
|
||
|
var isRowReorderComplete = false;
|
||
|
|
||
|
mytable.on(\'row-reorder\', function(e, diff, edit) {
|
||
|
isRowReorderComplete = true;
|
||
|
});
|
||
|
|
||
|
mytable.on(\'draw\', function() {
|
||
|
if (isRowReorderComplete) {
|
||
|
var url = mytable.table().node().getAttribute(\'data-url\');
|
||
|
var ids = mytable.rows().nodes().map(function(node) {
|
||
|
return $(node).data(\'id\');
|
||
|
}).toArray();
|
||
|
|
||
|
console.log(ids);
|
||
|
$.ajax({
|
||
|
url: url,
|
||
|
type: "POST",
|
||
|
headers: {
|
||
|
"X-CSRF-TOKEN": $(\'meta[name="csrf-token"]\').attr(\'content\')
|
||
|
},
|
||
|
data: {
|
||
|
id_order: ids
|
||
|
},
|
||
|
success: function(response) {
|
||
|
console.log(response);
|
||
|
},
|
||
|
error: function(xhr, status, error) {
|
||
|
console.error(error);
|
||
|
}
|
||
|
});
|
||
|
isRowReorderComplete=false;
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
function confirmDelete(url) {
|
||
|
event.preventDefault();
|
||
|
Swal.fire({
|
||
|
title: \'Are you sure?\',
|
||
|
text: \'You will not be able to recover this item!\',
|
||
|
icon: \'warning\',
|
||
|
showCancelButton: true,
|
||
|
confirmButtonText: \'Delete\',
|
||
|
cancelButtonText: \'Cancel\',
|
||
|
reverseButtons: true
|
||
|
}).then((result) => {
|
||
|
if (result.isConfirmed) {
|
||
|
$.ajax({
|
||
|
url: url,
|
||
|
type: \'GET\',
|
||
|
headers: {
|
||
|
\'X-CSRF-TOKEN\': $(\'meta[name="csrf-token"]\').attr(\'content\')
|
||
|
},
|
||
|
success: function(response) {
|
||
|
Swal.fire(\'Deleted!\', \'The item has been deleted.\', \'success\');
|
||
|
location.reload();
|
||
|
},
|
||
|
error: function(xhr, status, error) {
|
||
|
Swal.fire(\'Error!\', \'An error occurred while deleting the item.\', \'error\');
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
function confirmToggle(url) {
|
||
|
event.preventDefault();
|
||
|
Swal.fire({
|
||
|
title: \'Are you sure?\',
|
||
|
text: \'Publish Status of Item will be changed!! if Unpublished, links will be dead!\',
|
||
|
icon: \'warning\',
|
||
|
showCancelButton: true,
|
||
|
confirmButtonText: \'Proceed\',
|
||
|
cancelButtonText: \'Cancel\',
|
||
|
reverseButtons: true
|
||
|
}).then((result) => {
|
||
|
if (result.isConfirmed) {
|
||
|
$.ajax({
|
||
|
url: url,
|
||
|
type: \'GET\',
|
||
|
headers: {
|
||
|
\'X-CSRF-TOKEN\': $(\'meta[name="csrf-token"]\').attr(\'content\')
|
||
|
},
|
||
|
success: function(response) {
|
||
|
Swal.fire(\'Updated!\', \'Publishing Status has been updated.\', \'success\');
|
||
|
location.reload();
|
||
|
},
|
||
|
error: function(xhr, status, error) {
|
||
|
Swal.fire(\'Error!\', \'An error occurred.\', \'error\');
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
function confirmClone(url) {
|
||
|
event.preventDefault();
|
||
|
Swal.fire({
|
||
|
title: \'Are you sure?\',
|
||
|
text: \'Clonning will create replica of current row. No any linked data will be updated!\',
|
||
|
icon: \'warning\',
|
||
|
showCancelButton: true,
|
||
|
confirmButtonText: \'Proceed\',
|
||
|
cancelButtonText: \'Cancel\',
|
||
|
reverseButtons: true
|
||
|
}).then((result) => {
|
||
|
if (result.isConfirmed) {
|
||
|
$.ajax({
|
||
|
url: url,
|
||
|
type: \'GET\',
|
||
|
headers: {
|
||
|
\'X-CSRF-TOKEN\': $(\'meta[name="csrf-token"]\').attr(\'content\')
|
||
|
},
|
||
|
success: function(response) {
|
||
|
Swal.fire(\'Updated!\', \'Clonning Completed\', \'success\');
|
||
|
location.reload();
|
||
|
},
|
||
|
error: function(xhr, status, error) {
|
||
|
Swal.fire(\'Error!\', \'An error occurred.\', \'error\');
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
</script>
|
||
|
|
||
|
|
||
|
@endpush
|
||
|
';
|
||
|
|
||
|
$path = base_path() . "/resources/views/crud/generated/$folder/";
|
||
|
$file = $path . "index.blade.php";
|
||
|
if (!file_exists("$path")) {
|
||
|
mkdir("$path", 0777, true);
|
||
|
}
|
||
|
if (!file_exists($file)) {
|
||
|
$file = fopen($file, 'w');
|
||
|
fwrite($file, $listContent);
|
||
|
fclose($file);
|
||
|
}
|
||
|
return $listContent;
|
||
|
}
|
||
|
|
||
|
//End of list code content
|
||
|
|
||
|
//ajax complete List
|
||
|
|
||
|
|
||
|
public static function modelContent($tableName, $directoryName)
|
||
|
{
|
||
|
$tableName = strtolower($tableName);
|
||
|
$modelPath = '';
|
||
|
if (!empty($directoryName)) {
|
||
|
$modelPath .= "\\" . ucfirst($directoryName);
|
||
|
}
|
||
|
|
||
|
$modelClass = ucfirst(str_replace("tbl_", "", $tableName));
|
||
|
|
||
|
|
||
|
$tableFields = DB::select("describe $tableName");
|
||
|
$pkField = $tableFields[0]->Field;
|
||
|
|
||
|
$skipPRimaryKey = 1;
|
||
|
$tableColumns = '';
|
||
|
foreach ($tableFields as $tableField):
|
||
|
if ($skipPRimaryKey == 1) {
|
||
|
$skipPRimaryKey = 2;
|
||
|
continue;
|
||
|
}
|
||
|
$tableColumns .= "'" . $tableField->Field . "',\n";
|
||
|
|
||
|
endforeach;
|
||
|
|
||
|
$contentString = "<?php
|
||
|
namespace App\Models$modelPath;
|
||
|
|
||
|
use App\Models\User;
|
||
|
use Illuminate\Database\Eloquent\Casts\Attribute;
|
||
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||
|
use Illuminate\Database\Eloquent\Model;
|
||
|
use App\Traits\CreatedUpdatedBy;
|
||
|
|
||
|
class $modelClass extends Model
|
||
|
{
|
||
|
use HasFactory, CreatedUpdatedBy;
|
||
|
|
||
|
protected \$primaryKey = '$pkField';
|
||
|
public \$timestamps = true;
|
||
|
protected \$fillable =[
|
||
|
$tableColumns
|
||
|
];
|
||
|
|
||
|
protected \$appends = ['status_name'];
|
||
|
|
||
|
protected function getStatusNameAttribute()
|
||
|
{
|
||
|
return \$this->status == 1 ? '<span class=\"badge text-bg-success-soft\"> Active </span>' : '<span class=\"badge text-bg-danger-soft\">Inactive</span>';
|
||
|
}
|
||
|
|
||
|
protected function createdBy(): Attribute
|
||
|
{
|
||
|
return Attribute::make(
|
||
|
get: fn (\$value) => User::find(\$value) ? User::find(\$value)->name : '',
|
||
|
);
|
||
|
}
|
||
|
|
||
|
protected function updatedBy(): Attribute
|
||
|
{
|
||
|
return Attribute::make(
|
||
|
get: fn (\$value) => User::find(\$value) ? User::find(\$value)->name : '',
|
||
|
);
|
||
|
}
|
||
|
}";
|
||
|
|
||
|
$modelPath = '';
|
||
|
if (!empty($directoryName)) {
|
||
|
$modelPath .= ucfirst($directoryName) . '/';
|
||
|
}
|
||
|
|
||
|
if (!file_exists(base_path() . '/app/Models/' . $modelPath)) {
|
||
|
mkdir(base_path() . '/app/Models/' . $modelPath, 0777, true);
|
||
|
}
|
||
|
$filename = $modelClass . ".php";
|
||
|
if (!file_exists(base_path() . "/app/Models/" . $modelPath . $filename)) {
|
||
|
$file = fopen(base_path() . "/app/Models/" . $modelPath . $filename, 'w');
|
||
|
fwrite($file, $contentString);
|
||
|
fclose($file);
|
||
|
}
|
||
|
return $contentString;
|
||
|
}
|
||
|
|
||
|
|
||
|
public static function controllerContent($tableName, $directoryName)
|
||
|
{
|
||
|
$tableName = strtolower($tableName);
|
||
|
$tableFields = DB::select("describe $tableName");
|
||
|
$pkField = $tableFields[0]->Field;
|
||
|
$controllerName = ucfirst(str_replace("tbl_", "", $tableName)) . "Controller";
|
||
|
$viewName = '';
|
||
|
$controllerPath = '';
|
||
|
$modelName = '';
|
||
|
if (!empty($directoryName)) {
|
||
|
$viewName .= strtolower($directoryName) . '.';
|
||
|
$controllerPath .= "\\" . ucfirst($directoryName);
|
||
|
$modelName .= ucfirst($directoryName) . '\\';
|
||
|
}
|
||
|
$modelName .= ucfirst(str_replace("tbl_", "", $tableName));
|
||
|
$viewName .= strtolower(str_replace("tbl_", "", $tableName));
|
||
|
$modelClass = ucfirst(str_replace("tbl_", "", $tableName));
|
||
|
$tableAliasColumnName = "title";
|
||
|
|
||
|
$contentString = "<?php
|
||
|
namespace App\Http\Controllers$controllerPath;
|
||
|
use App\Http\Controllers\Controller;
|
||
|
use Illuminate\Http\Request;
|
||
|
use App\Models\\$modelName;
|
||
|
use Illuminate\Support\Facades\DB;
|
||
|
use Illuminate\Support\Facades\Validator;
|
||
|
use App\Service\CommonModelService;
|
||
|
use Log;
|
||
|
use Exception;
|
||
|
|
||
|
class $controllerName extends Controller
|
||
|
{
|
||
|
protected \$modelService;
|
||
|
public function __construct($modelClass \$model)
|
||
|
{
|
||
|
\$this->modelService = new CommonModelService(\$model);
|
||
|
}
|
||
|
public function index(Request \$request)
|
||
|
{
|
||
|
createActivityLog($controllerName::class, 'index', '$directoryName $modelClass index');
|
||
|
\$data = $modelClass::where('status','<>',-1)->orderBy('display_order')->get();
|
||
|
|
||
|
return view(\"crud.generated.$viewName.index\", compact('data'));
|
||
|
}
|
||
|
|
||
|
public function create(Request \$request)
|
||
|
{
|
||
|
createActivityLog($controllerName::class, 'create', '$directoryName $modelClass create');
|
||
|
\$TableData = $modelClass::where('status','<>',-1)->orderBy('display_order')->get();
|
||
|
\$editable=false;
|
||
|
return view(\"crud.generated.$viewName.edit\",compact('TableData','editable'));
|
||
|
}
|
||
|
|
||
|
public function store(Request \$request)
|
||
|
{
|
||
|
createActivityLog($controllerName::class, 'store', '$directoryName $modelClass store');
|
||
|
\$validator = Validator::make(\$request->all(), [
|
||
|
//ADD REQUIRED FIELDS FOR VALIDATION
|
||
|
]);
|
||
|
|
||
|
if (\$validator->fails()) {
|
||
|
return response()->json([
|
||
|
'error' => \$validator->errors(),
|
||
|
],500);
|
||
|
}
|
||
|
\$request->request->add(['alias' => slugify(\$request->$tableAliasColumnName)]);
|
||
|
\$request->request->add(['display_order' => getDisplayOrder('" . $tableName . "')]);
|
||
|
\$request->request->add(['created_at' => date(\"Y-m-d h:i:s\")]);
|
||
|
\$request->request->add(['updated_at' => date(\"Y-m-d h:i:s\")]);
|
||
|
\$requestData=\$request->all();
|
||
|
array_walk_recursive(\$requestData, function (&\$value) {
|
||
|
\$value = str_replace(env('APP_URL').'/', '', \$value);
|
||
|
});
|
||
|
array_walk_recursive(\$requestData, function (&\$value) {
|
||
|
\$value = str_replace(env('APP_URL'), '', \$value);
|
||
|
});
|
||
|
DB::beginTransaction();
|
||
|
try {
|
||
|
\$operationNumber = getOperationNumber();
|
||
|
\$this->modelService->create(\$operationNumber, \$operationNumber, null, \$requestData);
|
||
|
} catch (\Exception \$e) {
|
||
|
DB::rollBack();
|
||
|
Log::info(\$e->getMessage());
|
||
|
createErrorLog($controllerName::class, 'store', \$e->getMessage());
|
||
|
return response()->json(['status' => false, 'message' => \$e->getMessage()], 500);
|
||
|
}
|
||
|
DB::commit();
|
||
|
if (\$request->ajax()) {
|
||
|
return response()->json(['status' => true, 'message' => 'The $modelClass Created Successfully.'], 200);
|
||
|
}
|
||
|
return redirect()->route('$viewName.index')->with('success','The $modelClass created Successfully.');
|
||
|
}
|
||
|
|
||
|
public function sort(Request \$request)
|
||
|
{
|
||
|
\$idOrder = \$request->input('id_order');
|
||
|
|
||
|
foreach (\$idOrder as \$index => \$id) {
|
||
|
\$companyArticle = $modelClass::find(\$id);
|
||
|
\$companyArticle->display_order = \$index + 1;
|
||
|
\$companyArticle->save();
|
||
|
}
|
||
|
|
||
|
return response()->json(['status' => true, 'content' => 'The articles sorted successfully.'], 200);
|
||
|
}
|
||
|
public function updatealias(Request \$request)
|
||
|
{
|
||
|
|
||
|
\$articleId = \$request->input('articleId');
|
||
|
\$newAlias = \$request->input('newAlias');
|
||
|
\$companyArticle = $modelClass::find(\$articleId);
|
||
|
if (!\$companyArticle) {
|
||
|
return response()->json(['status' => false, 'content' => 'Company article not found.'], 404);
|
||
|
}
|
||
|
\$companyArticle->alias = \$newAlias;
|
||
|
\$companyArticle->save();
|
||
|
return response()->json(['status' => true, 'content' => 'Alias updated successfully.'], 200);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
public function show(Request \$request, \$id)
|
||
|
{
|
||
|
createActivityLog($controllerName::class, 'show', '$directoryName $modelClass show');
|
||
|
\$data = $modelClass::findOrFail(\$id);
|
||
|
|
||
|
return view(\"crud.generated.$viewName.show\", compact('data'));
|
||
|
}
|
||
|
|
||
|
|
||
|
public function edit(Request \$request, \$id)
|
||
|
{
|
||
|
createActivityLog($controllerName::class, 'edit', '$directoryName $modelClass edit');
|
||
|
\$TableData = $modelClass::where('status','<>',-1)->orderBy('display_order')->get();
|
||
|
\$data = $modelClass::findOrFail(\$id);
|
||
|
\$editable=true;
|
||
|
return view(\"crud.generated.$viewName.edit\", compact('data','TableData','editable'));
|
||
|
}
|
||
|
|
||
|
|
||
|
public function update(Request \$request, \$id)
|
||
|
{
|
||
|
createActivityLog($controllerName::class, 'update', '$directoryName $modelClass update');
|
||
|
\$validator = Validator::make(\$request->all(), [
|
||
|
//ADD VALIDATION FOR REQIRED FIELDS
|
||
|
]);
|
||
|
|
||
|
if (\$validator->fails()) {
|
||
|
return response()->json([
|
||
|
'error' => \$validator->errors(),
|
||
|
],500);
|
||
|
}
|
||
|
\$requestData=\$request->all();
|
||
|
array_walk_recursive(\$requestData, function (&\$value) {
|
||
|
\$value = str_replace(env('APP_URL').'/', '', \$value);
|
||
|
});
|
||
|
array_walk_recursive(\$requestData, function (&\$value) {
|
||
|
\$value = str_replace(env('APP_URL'), '', \$value);
|
||
|
});
|
||
|
DB::beginTransaction();
|
||
|
try {
|
||
|
\$OperationNumber = getOperationNumber();
|
||
|
\$this->modelService->update(\$OperationNumber, \$OperationNumber, null, \$requestData, \$request->input('" . $pkField . "'));
|
||
|
} catch (Exception \$e) {
|
||
|
DB::rollBack();
|
||
|
Log::info(\$e->getMessage());
|
||
|
createErrorLog($controllerName::class, 'update', \$e->getMessage());
|
||
|
return response()->json(['status' => false, 'message' => \$e->getMessage()], 500);
|
||
|
}
|
||
|
DB::commit();
|
||
|
if (\$request->ajax()) {
|
||
|
return response()->json(['status' => true, 'message' => 'The $modelClass updated Successfully.'], 200);
|
||
|
}
|
||
|
// return redirect()->route('$viewName.index')->with('success','The $modelClass updated Successfully.');
|
||
|
return redirect()->back()->with('success', 'The $modelClass updated successfully.');
|
||
|
}
|
||
|
|
||
|
public function destroy(Request \$request,\$id)
|
||
|
{
|
||
|
createActivityLog($controllerName::class, 'destroy', '$directoryName $modelClass destroy');
|
||
|
DB::beginTransaction();
|
||
|
try {
|
||
|
\$OperationNumber = getOperationNumber();
|
||
|
\$this->modelService->destroy(\$OperationNumber, \$OperationNumber, \$id);
|
||
|
} catch (Exception \$e) {
|
||
|
DB::rollBack();
|
||
|
Log::info(\$e->getMessage());
|
||
|
createErrorLog($controllerName::class, 'destroy', \$e->getMessage());
|
||
|
return response()->json(['status' => false, 'message' => \$e->getMessage()], 500);
|
||
|
}
|
||
|
DB::commit();
|
||
|
return response()->json(['status'=>true,'message'=>'The $modelClass Deleted Successfully.'],200);
|
||
|
}
|
||
|
public function toggle(Request \$request,\$id)
|
||
|
{
|
||
|
createActivityLog($controllerName::class, 'destroy', '$directoryName $modelClass destroy');
|
||
|
\$data = $modelClass::findOrFail(\$id);
|
||
|
\$requestData=['status'=>(\$data->status==1)?0:1];
|
||
|
DB::beginTransaction();
|
||
|
try {
|
||
|
\$OperationNumber = getOperationNumber();
|
||
|
\$this->modelService->update(\$OperationNumber, \$OperationNumber, null, \$requestData, \$id);
|
||
|
} catch (Exception \$e) {
|
||
|
DB::rollBack();
|
||
|
Log::info(\$e->getMessage());
|
||
|
createErrorLog($controllerName::class, 'destroy', \$e->getMessage());
|
||
|
return response()->json(['status' => false, 'message' => \$e->getMessage()], 500);
|
||
|
}
|
||
|
DB::commit();
|
||
|
return response()->json(['status'=>true,'message'=>'The $modelClass Deleted Successfully.'],200);
|
||
|
}
|
||
|
public function clone(Request \$request,\$id)
|
||
|
{
|
||
|
createActivityLog($controllerName::class, 'clone', '$directoryName $modelClass clone');
|
||
|
\$data = $modelClass::findOrFail(\$id);
|
||
|
unset(\$data['updatedby']);
|
||
|
unset(\$data['createdby']);
|
||
|
\$requestData=\$data->toArray();
|
||
|
DB::beginTransaction();
|
||
|
try {
|
||
|
\$OperationNumber = getOperationNumber();
|
||
|
\$this->modelService->create(\$OperationNumber, \$OperationNumber, null, \$requestData);
|
||
|
} catch (Exception \$e) {
|
||
|
DB::rollBack();
|
||
|
Log::info(\$e->getMessage());
|
||
|
createErrorLog($controllerName::class, 'clone', \$e->getMessage());
|
||
|
return response()->json(['status' => false, 'message' => \$e->getMessage()], 500);
|
||
|
}
|
||
|
DB::commit();
|
||
|
return response()->json(['status'=>true,'message'=>'The $modelClass Clonned Successfully.'],200);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
}
|
||
|
";
|
||
|
// $filename = ($controllerPath != "") ? $controllerPath . "/" : "";
|
||
|
$controllerDirectory = '';
|
||
|
if (!empty($controllerPath)) {
|
||
|
$controllerDirectory = ucfirst($directoryName) . '/';
|
||
|
}
|
||
|
$filename = $controllerName . ".php";
|
||
|
$filePath = base_path() . "/app/Http/Controllers/" . $controllerDirectory . $filename;
|
||
|
|
||
|
if (!file_exists($filePath)) {
|
||
|
if (!file_exists(base_path() . '/app/Http/Controllers/' . $controllerDirectory)) {
|
||
|
mkdir(base_path() . '/app/Http/Controllers/' . $controllerDirectory, 0777, true);
|
||
|
}
|
||
|
$file = fopen($filePath, 'w');
|
||
|
fwrite($file, $contentString);
|
||
|
fclose($file);
|
||
|
}
|
||
|
|
||
|
return $contentString;
|
||
|
}
|
||
|
}
|