Viewing file: DocumentController.php (16.08 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace App\Http\Controllers\Customer;
use App\Http\Controllers\Controller; use App\Models\Code; use App\Models\Document; use App\Models\ImageUrl; use App\Models\Language; use File; use Illuminate\Http\Request; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Response; use Illuminate\Support\Facades\Storage;
class DocumentController extends Controller { public function writeDocument(){ $data['languages'] = Language::where('status','active')->get(); return view('customer.open_ai.write_document',$data); } public function imageGenerate(){ return view('customer.open_ai.image_generate'); } public function codeGenerate(){ return view('customer.open_ai.code_generate'); }
private $models = [ "babbage" => "text-babbage-001", "curies" => "text-curie-001", "ada" => "text-ada-001", "davinci" => "text-davinci-003" ]; public function getRequest(Request $request){ try { $user = auth('customer')->user(); $currentplan = $user->current_plan; $openAiApiKey = get_settings('open_ai_api_key'); if (!$openAiApiKey){ return response()->json(['status' => 'failed', 'message' => 'API not configured']); } if (!$request->use_case){ return response()->json(['status' => 'failed', 'message' => 'Invalid request']); } if (!isset($request->use_case_input_fields[0])){ return response()->json(['status' => 'failed', 'message' => 'Invalid request']); } $second=$request->use_case_input_fields[1]??''; $third=$request->use_case_input_fields[2]??''; if(!$second){ $request["keyword"]=""; } if(!$third){ $request["description"]=""; }
$client = \OpenAI::client($openAiApiKey); $prompt = 'write a '.str_replace("_"," ",$request->use_case).' where '.$request->use_case_input_fields[0].' '.$request->topic.' '.$second .' '.$request->keyword.' '.$third.' '.$request->description.' and the variants is '.$request->variants.' and also the creativity level is '.$request->creativityLevel.' write in '.$request->language; $maxTokens = 1000; $result = $client->completions()->create([ 'model' => $this->models['davinci'], 'prompt' => $prompt, "max_tokens" => $maxTokens, ]);
$writeWord = count(explode(' ', $result['choices'][0]['text'])); if ($currentplan->is_word_limit=='no' ){ $availableWord = $currentplan->available_word - $writeWord; if ($availableWord <= 0 ){ return response()->json(['status' => 'failed', 'message' => 'Ops! You have extend your word limit']); } $currentplan->update(['available_word'=> $availableWord]); }
$name = $request->name; if (!$name){ $name = 'New folder'; } $user->documents()->create(['name'=>$name,'title'=> str_replace("_"," ",$request->use_case) ,'document' => $result['choices'][0]['text']]);
return response()->json(['status' => 'success', 'data' => $result['choices'][0]['text']]); } catch (\Exception $ex) { return response()->json(['status' => 'failed', 'message' => $ex->getMessage()]); }
}
public function getRequestImage(Request $request){ try { $user = auth('customer')->user(); $currentplan = $user->current_plan; $openAiApiKey = get_settings('open_ai_api_key'); if (!$openAiApiKey){ return response()->json(['status' => 'failed', 'message' => 'API not configured']); } if (!$request->keyword || !$request->imageQuantity || !$request->imageSize){ return response()->json(['status' => 'failed', 'message' => 'Invalid request']); } $client = \OpenAI::client($openAiApiKey); $prompt = $request->keyword; $imageQuantity = $request->imageQuantity; $imageSize = $request->imageSize;
$response = $client->images()->create([ 'prompt' => $prompt, 'n' => (int)$imageQuantity, 'size' => $imageSize, 'response_format' => 'url', ]);
if ($currentplan->is_image_limit=='no' ){ $availableImage = $currentplan->available_image - 1; if ($availableImage <= 0 ){ return response()->json(['status' => 'failed', 'message' => 'Ops! You have extend your image limit']); } $currentplan->update(['available_image'=> $availableImage]); } $name = $request->name; if (!$name){ $name = 'New folder'; }
$image = $user->images()->create(['name'=>$name,'title'=>$prompt,'total'=> $imageQuantity]); $imageUrl = []; $imgUrl = []; foreach ($response['data'] as $key=>$url){ $mime = get_headers($url['url'], 1)["Content-Type"]; $extension = explode('/', $mime )[1]; $filename=time().$key.'.'.$extension; Storage::disk('image')->put($filename, file_get_contents($url['url'])); $imageUrl[] = [ 'image_id' => $image->id, 'url' => $url['url'], 'file_name' => $filename, ]; $imgUrl[] = url('/generated/image/'.$filename); } ImageUrl::insert($imageUrl);
return response()->json(['status' => 'success', 'data' => $imgUrl]); } catch (\Exception $ex) { return response()->json(['status' => 'failed', 'message' => $ex->getMessage()]); } }
public function getRequestCode(Request $request){ try { $user = auth('customer')->user(); $currentplan = $user->current_plan; $openAiApiKey = get_settings('open_ai_api_key'); if (!$openAiApiKey){ return response()->json(['status' => 'failed', 'message' => 'API not configured']); } if (!$request->keyword){ return response()->json(['status' => 'failed', 'message' => 'Invalid request']); } $client = \OpenAI::client($openAiApiKey); $prompt = $request->keyword;
$maxTokens = 1000; $result = $client->completions()->create([ 'model' => $this->models['davinci'], 'prompt' => $prompt, "max_tokens" => $maxTokens, ]);
$writeCode = count(explode(' ', $result['choices'][0]['text'])); if ($currentplan->is_code_limit=='no' ){ $availableCode = $currentplan->available_code - $writeCode; if ($availableCode <= 0 ){ return response()->json(['status' => 'failed', 'message' => 'Ops! You have extend your code limit']); } $currentplan->update(['available_code'=> $availableCode]); } $name = $request->name; if (!$name){ $name = 'New folder'; }
$user->codes()->create(['name'=>$name,'title'=> $prompt ,'code' => $result['choices'][0]['text']]);
return response()->json(['status' => 'success', 'data' => $result['choices'][0]['text']]); } catch (\Exception $ex) { return response()->json(['status' => 'failed', 'message' => $ex->getMessage()]); }
} public function writeDocumentList(){ return view('customer.open_ai.write_document_list'); } public function imageGenerateList(){ return view('customer.open_ai.image_generate_list'); } public function codeGenerateList(){ return view('customer.open_ai.code_generate_list'); }
public function writeDocumentGetData(Request $request){ if($request->limit) { $documents = auth('customer')->user()->documents()->select(['id', 'customer_id', 'title', 'document', 'name', 'created_at'])->limit(10); }else { $documents = auth('customer')->user()->documents()->select(['id', 'customer_id', 'title', 'document', 'name', 'created_at']); } return datatables()->of($documents) ->addColumn('name', function ($q) { return $q->name; }) ->addColumn('document', function ($q) { return "<div class='show-more' style='max-width: 500px;white-space: pre-wrap;'>".trim($q->document)."</div>"; }) ->addColumn('download', function ($q) { return '<a class="btn btn-sm btn-primary" href='.route('customer.document.download',['id'=>$q->id,'type'=>'document']).'><i class="fa fa-download"></i></a>'; }) ->addColumn('action',function($q){ return '<a class="btn btn-sm btn-info contentRenameModal" data-id="'.$q->id.'" data-name="'.$q->name.'" data-type="document" ><i class="fa fa-pencil-alt text-white"></i></a> '. '<a class="btn btn-sm btn-danger" data-message="Are you sure you want to delete this document?" data-action='.route('customer.ai.content.delete',['id'=>$q->id,'type'=>'document']).' data-input={"_method":"delete"} data-toggle="modal" data-target="#modal-confirm"><i class="fa fa-trash text-white"></i></a>' ; }) ->rawColumns(['action','document','download']) ->toJson(); } public function codeGenerateGetData(){ $codes = auth('customer')->user()->codes()->select(['id','customer_id','title','code','name','created_at']); return datatables()->of($codes) ->addColumn('code', function ($q) { return "<div class='show-more' style='max-width: 500px;white-space: pre-wrap;'>".trim($q->code)."</div>"; }) ->addColumn('download', function ($q) { return '<a class="btn btn-sm btn-primary" href='.route('customer.document.download',['id'=>$q->id,'type'=>'code']).'><i class="fa fa-download"></i></a>'; }) ->addColumn('action',function($q){ return '<a class="btn btn-sm btn-info contentRenameModal" data-id="'.$q->id.'" data-name="'.$q->name.'" data-type="code" ><i class="fa fa-pencil-alt text-white"></i></a> '. '<a class="btn btn-sm btn-danger" data-message="Are you sure you want to delete this code?" data-action='.route('customer.ai.content.delete',['id'=>$q->id,'type'=>'code']).' data-input={"_method":"delete"} data-toggle="modal" data-target="#modal-confirm"><i class="fa fa-trash text-white"></i></a>' ; }) ->rawColumns(['action','code','download']) ->toJson(); } public function imageGenerateGetData(){ $planRequests = auth('customer')->user()->images()->select(['id','customer_id','title','total','name','created_at']); return datatables()->of($planRequests) ->addColumn('download', function ($q) { return '<a class="btn btn-sm btn-primary" href='.route('customer.image.download',['id'=>$q->id]).'><i class="fa fa-download"></i></a>'; }) ->addColumn('action',function($q){ return '<a class="btn btn-sm btn-info contentRenameModal" data-id="'.$q->id.'" data-name="'.$q->name.'" data-type="image" ><i class="fa fa-pencil-alt text-white"></i></a> '. '<a class="btn btn-sm btn-danger" data-message="Are you sure you want to delete this image?" data-action='.route('customer.ai.content.delete',['id'=>$q->id,'type'=>'image']).' data-input={"_method":"delete"} data-toggle="modal" data-target="#modal-confirm"><i class="fa fa-trash text-white"></i></a>' ; }) ->rawColumns(['action','download']) ->toJson(); }
public function aiContentDelete(Request $request){ if ($request->type == 'document'){ auth('customer')->user()->documents()->where('id',$request->id)->delete(); return back()->with('success','Document successfully deleted'); }elseif ($request->type == 'code'){ auth('customer')->user()->codes()->where('id',$request->id)->delete(); return back()->with('success','Code successfully deleted'); }elseif ($request->type == 'image'){ $image = auth('customer')->user()->images()->where('id',$request->id)->first(); ImageUrl::where('image_id',$image->id)->delete(); $image->delete(); return back()->with('success','Images successfully deleted'); }else{ return back()->withErrors(['failed' => 'Ops! Something happenings wrong']); } } public function aiContentRename(Request $request){ if ($request->type == 'document'){ auth('customer')->user()->documents()->where('id',$request->id)->update(['name'=>$request->name]); return back()->with('success','Document name successfully rename'); }elseif ($request->type == 'code'){ auth('customer')->user()->codes()->where('id',$request->id)->update(['name'=>$request->name]); return back()->with('success','Code name successfully rename'); }elseif ($request->type == 'image'){ auth('customer')->user()->images()->where('id',$request->id)->update(['name'=>$request->name]); return back()->with('success','Images name successfully rename'); }else{ return back()->withErrors(['failed' => 'Ops! Something happenings wrong']); } } public function imageDownload(Request $request){ $images = ImageUrl::where('image_id',$request->id)->pluck('file_name')->toArray(); $zip = new \ZipArchive(); $fileName = 'zipFile.zip'; if ($zip->open(storage_path($fileName), \ZipArchive::CREATE)== TRUE) { $files = File::files(storage_path('app/generated')); foreach ($files as $value){ $relativeName = basename($value); if (in_array($relativeName,$images)){ $zip->addFile($value, $relativeName); } } $zip->close(); }
return response()->download(storage_path($fileName)); } public function documentDownload(Request $request){ if ($request->type == 'document'){ $document = Document::where('id',$request->id)->firstOrfail(); $data = $document->document; $title = $document->title; }else{ $document = Code::where('id',$request->id)->firstOrfail(); $data = $document->code; $title = $document->title; }
$fileName = str_replace(' ', '_', $title) . '.txt'; $headers = [ 'Content-type' => 'text/plain', 'Content-Disposition' => 'attachment; filename="'.$fileName.'"' ];
return Response::make($data, '200', $headers); } public function generatedImage($name){ if (!Storage::disk('image')->exists($name)) { return response('File no found.', 404); } $file=Storage::disk('image')->get($name); $type = Storage::mimeType($name); return response($file, 200)->header("Content-Type", $type); }
}
|