366 lines
14 KiB
PHP
Executable File
366 lines
14 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;
|
|
use Auth;
|
|
use DB;
|
|
use App\Jobs\Importdata;
|
|
|
|
class Controller extends BaseController
|
|
{
|
|
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
|
|
|
|
protected $_service;
|
|
protected $_module;
|
|
protected $_viewname;
|
|
protected $_title;
|
|
protected $_id;
|
|
protected $_request;
|
|
protected $_listtype = 'list';
|
|
|
|
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 = []) {
|
|
return LambdaRequest::signedrequest($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($this->_listtype)->with([
|
|
'title' => $this->_title,
|
|
'fields' => $fields,
|
|
'base_url' => $this->_base_url,
|
|
'items' => $response->data->items,
|
|
'buttons' => $this->get_list_buttons()
|
|
]);
|
|
}
|
|
|
|
public function ajaxlist(Request $request) {
|
|
$params = $request->input();
|
|
$search = [];
|
|
foreach($params['columns'] as $col) {
|
|
if($col['search']['value'] != '') {
|
|
$search[$col['data']] = $col['search']['value'];
|
|
}
|
|
}
|
|
$fields = $this->get_list_fields();
|
|
$response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/get_all', ['start' => $params['start'], 'length' => $params['length'], 'search' => json_encode($search), 'keyword' => $params['search']['value'] ]);
|
|
Log::debug(print_r($response, true));
|
|
|
|
$users = [];
|
|
foreach($response->data->items as $item) {
|
|
$user = [];
|
|
if(isset($item->id)) {
|
|
$user['id'] = $item->id;
|
|
}
|
|
foreach($fields as $field => $props){
|
|
if($field != 'actions') {
|
|
switch($props['type']){
|
|
case('image'):
|
|
$user[$field] = '<img src="'.$item->{$field}.'" class="img-thumbnail"> ';
|
|
break;
|
|
case('text'):
|
|
case('select'):
|
|
$user[$field] = isset($item->{$field}) ? $item->{$field} : '';
|
|
break;
|
|
case('date'):
|
|
$user[$field] = date("d M Y", strtotime($item->{$field}));
|
|
break;
|
|
}
|
|
} else {
|
|
$user['actions'] = [];
|
|
foreach($props['buttons'] as $key => $button){
|
|
switch($button) {
|
|
case 'edit':
|
|
$user['actions'][] = ['link' => '/edit?id='.$item->id, 'icon' => 'square-edit-outline text-warning'];
|
|
break;
|
|
case 'delete':
|
|
$user['actions'][] = ['link' => '/delete?id='.$item->id, 'icon' => 'delete text-danger'];
|
|
break;
|
|
default:
|
|
$querystring = $button['querystring'];
|
|
foreach((array)$item as $k => $v) {
|
|
if(strpos($querystring,'{'.strtoupper($k).'}') !== false)
|
|
$querystring = str_replace('{'.strtoupper($k).'}', $v, $querystring);
|
|
}
|
|
$user['actions'][] = ['link' => '/'.$key.'?'.$querystring, 'icon' => $button['icon']];
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$users[] = $user;
|
|
}
|
|
|
|
return response()->json(['data' => $users, 'iTotalRecords' => $response->data->count, 'iTotalDisplayRecords' => $response->data->count]);
|
|
}
|
|
|
|
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');
|
|
$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);
|
|
if($this->validateImport($header, $records)) {
|
|
$path = $request->file('importfile')->store('user_import', 's3');
|
|
$user = Auth::user();
|
|
$id = DB::table('import_jobs')->insertGetId(['user_id' => $user->id, 'domain' => $user->domain, 'service' => $this->_service, 'module' => $this->_module, 'filepath' => $path, 'status' => 1 ]);
|
|
Importdata::dispatch($id);
|
|
return redirect($this->_base_url.'/importprocess?id='.$id)->withMessage('Successfully Uploaded !!!');
|
|
} else {
|
|
return \Redirect::back()->withMessage('CSV File incorrect. Either not all required fields have values or data type is incorrect. Please check and try again!');
|
|
}
|
|
} else {
|
|
return \Redirect::back()->withMessage('Some Error occured!');
|
|
}
|
|
}
|
|
|
|
public function importprocess(Request $request) {
|
|
$id = $request->input('id', 0);
|
|
$import = DB::table('import_jobs')->where('id', $id)->first();
|
|
return $this->view('importprocess')->with(['baseurl' => $this->_base_url, 'id' => $id]);
|
|
}
|
|
|
|
public function importstatus(Request $request) {
|
|
$id = $request->input('id', 0);
|
|
$import = DB::table('import_jobs')->where('id', $id)->first();
|
|
return response()->json($import);
|
|
}
|
|
|
|
|
|
|
|
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, 10);
|
|
Log::debug(print_r($tempdata, true));
|
|
$response = LambdaRequest::signedrequest('post', $this->_service, $this->_module.'/import', $tempdata);
|
|
Log::debug(print_r($response, true));
|
|
$count = $count + 10;
|
|
$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($fields); 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($this->_base_url.'s')->withError('Some Error occured! '. $response->message);
|
|
//return \Redirect::back()->withMessage('Some Error occured!');
|
|
}
|
|
}
|
|
|
|
public function delete($id) {
|
|
//echo '<pre>'; print_r($id); exit;
|
|
$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($this->_base_url.'s')->withError('Some Error occured! '. $response->message);
|
|
//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(is_array($request->file($name))) {
|
|
$paths = [];
|
|
foreach($request->file($name) as $file) {
|
|
$path = $file->store($folder, 's3');
|
|
$path = env('AWS_URL').'/'.$path;
|
|
$paths[] = $path;
|
|
}
|
|
$path = implode(',', $paths);
|
|
} else 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;
|
|
}
|
|
|
|
protected function _uploadMediaLocal($request, $name = 'image', $folder = 'image') {
|
|
$path = '';
|
|
try {
|
|
if( $request->file($name) ) {
|
|
$path = $request->file($name)->store($folder);
|
|
$path = '/'.str_replace('public', 'storage', $path);
|
|
}
|
|
} catch (AwsException $e) {
|
|
Log::debug($e->getMessage());
|
|
}
|
|
return $path;
|
|
}
|
|
}
|