Rapport-Laravel/app/Http/Controllers/Controller.php

249 lines
8.8 KiB
PHP
Executable File

<?php
namespace App\Http\Controllers;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Http\Request;
use App\Http\Requests\LambdaRequest;
use League\Csv\Reader;
use Log;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
protected $_service;
protected $_module;
protected $_viewname;
protected $_title;
protected $_id;
protected $_request;
protected function view($viewname) {
if (\View::exists($this->_viewname.'.'.$viewname)) {
return view($this->_viewname.'.'.$viewname);
} else {
return view('common.'.$viewname);
}
}
protected function getlambda($type, $service, $module, $url, $data = []) {
if($url == 'dropdown' && $this->_request->session()->has($service.'-'.$module.'-'.$url) ) {
return $this->_request->session()->get($service.'-'.$module.'-'.$url);
} elseif($url == 'dropdown'){
$res = LambdaRequest::signedrequest($type, $service, $module.'/'.$url, $data);
$this->_request->session()->put($service.'-'.$module.'-'.$url, $res);
return $res;
} else {
return LambdaRequest::signedrequest($type, $service, $module.'/'.$url, $data);
}
}
public function action($action, Request $request) {
$this->_request = $request;
switch ($action) {
case 'edit':
return $this->form('edit', $request->input('id'));
break;
case 'addnew':
return $this->form('new');
break;
case 'delete':
return $this->delete($request->input('id'));
break;
default:
return $this->{$action}($request);
break;
}
}
public function postaction($action, Request $request) {
$this->_request = $request;
switch ($action) {
case 'edit':
return $this->save('edit', $request );
break;
case 'addnew':
return $this->save('new', $request );
break;
default:
return $this->{'post'.$action}($request);
break;
}
}
public function list(Request $request) {
$response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/get_all');
//echo '<pre>'; print_r($response); exit;
if($response->statusCode == 401) {
return redirect('/unauthorised');
}
$fields = $this->get_list_fields();
//echo '<pre>'; print_r($fields); exit;
return $this->view('list')->with([
'title' => $this->_title,
'fields' => $fields,
'base_url' => $this->_base_url,
'items' => $response->data->items,
'buttons' => $this->get_list_buttons()
]);
}
public function unauthorised() {
return view('common.unauthorised');
}
public function import(Request $request) {
return $this->view('import')->with([
'title' => $this->_title,
'base_url' => $this->_base_url,
]);
}
public function postimport(Request $request) {
if( $request->file('importfile') ) {
$path = $request->file('importfile')->store('user_import');
$request->session()->put('user_import_path', $path);
return redirect($this->_base_url.'/importmap')->withMessage('Successfully Uploaded !!!');
} else {
return \Redirect::back()->withMessage('Some Error occured!');
}
}
public function importmap(Request $request) {
$path = $request->session()->get('user_import_path');
$csv = Reader::createFromPath(storage_path('app') .'/' . $path, 'r');
$csv->setHeaderOffset(0);
$header = $csv->getHeader(); //returns the CSV header record
$records = $csv->getRecords(); //returns all the CSV records as an Iterator object
$fields = $this->get_import_fields($records);
// echo '<pre>';
// foreach($records as $record){
// print_r($record);
// }
// exit;
return $this->view('importmap')->with([
'title' => $this->_title,
'base_url' => $this->_base_url,
'records' => $records,
'fields' => $fields,
]);
}
public function postimportmap(Request $request) {
$post = $request->except('_token');
$post = $this->flip_row_col_array($post);
$created = 0;
$updated = 0;
$count = 0;
$total = sizeof($post);
while($count < $total) {
$tempdata = array_slice($post, $count, 25);
Log::debug(print_r($tempdata, true));
$response = LambdaRequest::signedrequest('post', $this->_service, $this->_module.'/import', $tempdata);
Log::debug(print_r($response, true));
$count = $count + 25;
$created = $created + $response->data->created_count;
$updated = $updated + (isset($response->data->updated_count) ? $response->data->updated_count : 0);
Log::debug(print_r(['$count' => $count, '$created' => $created, '$updated' => $updated], true));
}
//echo '<pre>'; print_r($response); exit;
if($response->statusCode == 200 && $response->status == "success") {
return redirect($this->_base_url.'s')->withMessage('Successfully Imported ' .$created. ' records and Updated ' .$updated. ' records out of ' .$total. ' records!!!');
} else {
return \Redirect::back()->withMessage('Some Error occured!');
}
}
private function flip_row_col_array($array) {
$out = array();
foreach ($array as $rowkey => $row) {
foreach($row as $colkey => $col){
$out[$colkey][$rowkey]=$col;
}
}
return $out;
}
protected function get_list_buttons() {
return [ ['title' => 'Add New', 'link' => $this->_base_url.'/addnew' ] ];
}
public function form($type, $id = null) {
$values = [];
if($type == 'edit') {
$response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/get_one', ['id' => $id]);
$values = $response->data->item;
//echo '<pre>'; print_r($values); exit;
}
//echo '<pre>'; print_r($values); exit;
$data = $this->_beforeform($type, $values);
$fields = $this->get_form_fields($type, $values);
//echo '<pre>'; print_r($data); exit;
return $this->view('form')->with([
'title' => $this->_title,
'mode' => $type,
'fields' => $fields,
'base_url' => $this->_base_url,
'item' => $values,
]);
}
public function save($type, $request ) {
if($type == 'edit') {
$url = '/update';
} else {
$url = '/create';
}
$data = $this->_beforesave($type, $request);
//echo '<pre>'; print_r($data); exit;
$response = LambdaRequest::signedrequest('post', $this->_service, $this->_module.$url, $data);
//echo '<pre>'; print_r($response); exit;
if($response->statusCode == 200 && $response->status == "success") {
//echo '<pre>'; print_r($response); exit;
//return redirect($this->_base_url.'/edit?id='.$response->data->item->id)->withMessage('Successfully Saved !!!');
return redirect($this->_base_url.'s')->withMessage('Successfully Saved !!!');
} else {
return \Redirect::back()->withMessage('Some Error occured!');
}
}
public function delete($id) {
$response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/delete', ['id' => $id]);
//echo '<pre>'; print_r($response); exit;
if($response->statusCode == 200 && $response->status == "success") {
//echo '<pre>'; print_r($response); exit;
return redirect($this->_base_url.'s')->withMessage('Successfully Marked Deleted !!!');
} else {
return \Redirect::back()->withMessage('Some Error occured!');
}
}
protected function _beforesave($type, $request) {
return $request->except('_token');
}
protected function _beforeform($type, $values) {
return $values;
}
protected function _uploadMedia($request, $name = 'image', $folder = 'image') {
$path = '';
try {
if( $request->file($name) ) {
$path = $request->file($name)->store($folder, 's3');
$path = env('AWS_URL').'/'.$path;
}
} catch (AwsException $e) {
Log::debug($e->getMessage());
}
return $path;
}
}