Files
php_task_1/application/controllers/Admin/Admin_spreadsheet_controller.php
2022-06-30 05:46:02 -04:00

433 lines
17 KiB
PHP
Executable File

<?php defined('BASEPATH') OR exit('No direct script access allowed');
include_once 'Admin_controller.php';
/*Powered By: Manaknightdigital Inc. https://manaknightdigital.com/ Year: 2021*/
/**
* Spreadsheet Controller
* @copyright 2019 Manaknightdigital Inc.
* @link https://manaknightdigital.com
* @license Proprietary Software licensing
* @author Ryan Wong
*
*/
class Admin_spreadsheet_controller extends Admin_controller
{
protected $_model_file = 'spreadsheet_model';
public $_page_name = 'Spreadsheet';
public function __construct()
{
parent::__construct();
}
public function index($page)
{
$this->load->library('pagination');
include_once __DIR__ . '/../../view_models/Spreadsheet_admin_list_paginate_view_model.php';
$session = $this->get_session();
$format = $this->input->get('format', TRUE) ?? 'view';
$order_by = $this->input->get('order_by', TRUE) ?? '';
$direction = $this->input->get('direction', TRUE) ?? 'ASC';
$per_page_sort = $this->input->get('per_page_sort', TRUE) ?? 25;
$this->_data['view_model'] = new Spreadsheet_admin_list_paginate_view_model(
$this->spreadsheet_model,
$this->pagination,
'/admin/spreadsheet/0');
$this->_data['view_model']->set_heading('Spreadsheet');
$this->_data['view_model']->set_id(($this->input->get('id', TRUE) != NULL) ? $this->input->get('id', TRUE) : NULL);
$this->_data['view_model']->set_name(($this->input->get('name', TRUE) != NULL) ? $this->input->get('name', TRUE) : NULL);
$this->_data['view_model']->set_user_id(($this->input->get('user_id', TRUE) != NULL) ? $this->input->get('user_id', TRUE) : NULL);
$this->_data['view_model']->set_status(($this->input->get('status', TRUE) != NULL) ? $this->input->get('status', TRUE) : NULL);
$this->_data['view_model']->set_created_at(($this->input->get('created_at', TRUE) != NULL) ? $this->input->get('created_at', TRUE) : NULL);
$where = [
'id' => $this->_data['view_model']->get_id(),
'name' => $this->_data['view_model']->get_name(),
'user_id' => $this->_data['view_model']->get_user_id(),
'status' => $this->_data['view_model']->get_status(),
'created_at' => $this->_data['view_model']->get_created_at(),
];
$this->_data['view_model']->set_total_rows($this->spreadsheet_model->count($where));
$this->_data['view_model']->set_format_layout($this->_data['layout_clean_mode']);
$this->_data['view_model']->set_per_page($per_page_sort);
$this->_data['view_model']->set_order_by($order_by);
$this->_data['view_model']->set_sort($direction);
$this->_data['view_model']->set_sort_base_url('/admin/spreadsheet/0');
$this->_data['view_model']->set_page($page);
$this->_data['view_model']->set_list($this->spreadsheet_model->get_paginated(
$this->_data['view_model']->get_page(),
$this->_data['view_model']->get_per_page(),
$where,
$order_by,
$direction));
if ($format == 'csv')
{
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="export.csv"');
echo $this->_data['view_model']->to_csv();
exit();
}
if ($format != 'view')
{
return $this->output->set_content_type('application/json')
->set_status_header(200)
->set_output(json_encode($this->_data['view_model']->to_json()));
}
return $this->render('Admin/Spreadsheet', $this->_data);
}
public function add()
{
include_once __DIR__ . '/../../view_models/Spreadsheet_admin_add_view_model.php';
$session = $this->get_session();
$this->form_validation = $this->spreadsheet_model->set_form_validation(
$this->form_validation, $this->spreadsheet_model->get_all_validation_rule());
$this->_data['view_model'] = new Spreadsheet_admin_add_view_model($this->spreadsheet_model);
$this->_data['view_model']->set_heading('Spreadsheet');
if ($this->form_validation->run() === FALSE)
{
return $this->render('Admin/SpreadsheetAdd', $this->_data);
}
$name = $this->input->post('name', TRUE);
$value = $this->input->post('value', TRUE);
$status = $this->input->post('status', TRUE);
$final_value = "";
$luckysheet_order = "";
$file_name = $_FILES['value']['name'];
if($file_name != "")
{
$original_name = "";
$original_name = explode('.' , $file_name);
if(is_array($original_name) && count($original_name) > 1)
{
$original_name = $original_name[0];
}
$value_file = fopen($_FILES['value']['tmp_name'], "r");
if($_FILES['value']['type'] == 'text/csv')
{
$default_delimeter = ";";
$headers = fgetcsv($value_file, 10000, $default_delimeter);
/**
* Condition for checking and setting up the delimeter for the csv
*/
if(is_array($headers) && count($headers) <= 1)
{
$headers = fgetcsv($value_file, 10000, ',');
if(is_array($headers) && count($headers)>1)
{
$default_delimeter = ",";
}
}
if(!empty($headers) && is_array($headers))
{
$temp_array[] = array();
for( $x = 0 ; $x < count($headers); $x++)
{
$header_array = array(
'r' => 0,
'c' => $x,
'v' => array(
'ct' => array(
'fa' => 'General',
't' => 'g'
),
'm' => $headers[$x],
'v' => $headers[$x]
)
);
$temp_array[$x] = $header_array;
}
$ro = 1 ; //count of rows
while (($data = fgetcsv($value_file, 1000,$default_delimeter)) !== FALSE)
{
if(!empty($data) && is_array($data))
{
foreach($data as $data_key => $values)
{
$body_data = array(
'r' => $ro,
'c' => $data_key,
'v' => array(
'ct' => array(
'fa' => 'General',
't' => 'g'
),
'm' => $values,
'v' => $values
)
);
$temp_array[] = $body_data;
}
}
$ro++;
}
$luckysheet_format =
array(
array(
'name' => $original_name, //Worksheet name
'color' => '', //Worksheet color
'index' => '0', //Worksheet index
'status' => 1, //Worksheet active status
'order' => 0, //The order of the worksheet
'hide' => 0,//Whether worksheet hide
'row' => 100, //the number of rows in a sheet
'column' => 36, //the number of columns in a sheet
'defaultRowHeight' => 19, //Customized default row height
'defaultColWidth' => 73, //Customized default column width
'celldata' => $temp_array,//Initial the cell data
'config' => array(
'merge' => new ArrayObject(), //merged cells
'rowlen' => new ArrayObject(), //Table row height
'columnlen' => new ArrayObject(), //Table column width
'rowhidden' => new ArrayObject(), //hidden rows
'colhidden' => new ArrayObject(), //hidden columns
'borderInfo'=> new ArrayObject(), //borders
'authority' => new ArrayObject(), //Worksheet protection
),
'scrollLeft' => 0, //Left and right scroll bar position
'scrollTop' => 315, //Up and down scroll bar position
'luckysheet_select_save' => [], //selected area
'calcChain' => [],//Formula chain
'isPivotTable' => false,//Whether is pivot table
'pivotTable' => new ArrayObject(),//Pivot table settings
'filter_select' => new ArrayObject(),//Filter range
'filter' => null,//Filter configuration
'luckysheet_alternateformat_save' => array(), //Alternate colors
'luckysheet_alternateformat_save_modelCustom' => [], //Customize alternate colors
'luckysheet_conditionformat_save' => new ArrayObject(),//condition format
'frozen' => new ArrayObject(), //freeze row and column configuration
'chart' => [], //Chart configuration
'zoomRatio' => 1, // zoom ratio
'image' => [], //image
'showGridLines' => 1, //Whether to show grid lines
)
);
$luckysheet_order = json_encode($luckysheet_format);
}
fclose($value_file);
}
}
else
{
$luckysheet_format =
array(
array(
'name' => $name, //Worksheet name
'color' => '', //Worksheet color
'index' => '0', //Worksheet index
'status' => 1, //Worksheet active status
'order' => 0, //The order of the worksheet
'hide' => 0,//Whether worksheet hide
'row' => 100, //the number of rows in a sheet
'column' => 36, //the number of columns in a sheet
'defaultRowHeight' => 19, //Customized default row height
'defaultColWidth' => 73, //Customized default column width
'celldata' => [],//Initial the cell data
'config' => array(
'merge' => new ArrayObject(), //merged cells
'rowlen' => new ArrayObject(), //Table row height
'columnlen' => new ArrayObject(), //Table column width
'rowhidden' => new ArrayObject(), //hidden rows
'colhidden' => new ArrayObject(), //hidden columns
'borderInfo'=> new ArrayObject(), //borders
'authority' => new ArrayObject(), //Worksheet protection
),
'scrollLeft' => 0, //Left and right scroll bar position
'scrollTop' => 315, //Up and down scroll bar position
'luckysheet_select_save' => [], //selected area
'calcChain' => [],//Formula chain
'isPivotTable' => false,//Whether is pivot table
'pivotTable' => new ArrayObject(),//Pivot table settings
'filter_select' => new ArrayObject(),//Filter range
'filter' => null,//Filter configuration
'luckysheet_alternateformat_save' => array(), //Alternate colors
'luckysheet_alternateformat_save_modelCustom' => [], //Customize alternate colors
'luckysheet_conditionformat_save' => new ArrayObject(),//condition format
'frozen' => new ArrayObject(), //freeze row and column configuration
'chart' => [], //Chart configuration
'zoomRatio' => 1, // zoom ratio
'image' => [], //image
'showGridLines' => 1, //Whether to show grid lines
)
);
$luckysheet_order = json_encode($luckysheet_format);
}
$result = $this->spreadsheet_model->create([
'name' => $name,
'value' => $luckysheet_order,
'status' => $status,
'user_id' => $session['user_id']
]);
if ($result)
{
$this->success('Spreadsheet added.');
return $this->redirect('/admin/spreadsheet/0', 'refresh');
}
$this->_data['error'] = 'Error';
return $this->render('Admin/SpreadsheetAdd', $this->_data);
}
public function edit($id)
{
$model = $this->spreadsheet_model->get($id);
$session = $this->get_session();
if (!$model)
{
$this->error('Error');
return redirect('/admin/spreadsheet/0');
}
include_once __DIR__ . '/../../view_models/Spreadsheet_admin_edit_view_model.php';
$this->form_validation = $this->spreadsheet_model->set_form_validation(
$this->form_validation, $this->spreadsheet_model->get_all_edit_validation_rule());
$this->_data['view_model'] = new Spreadsheet_admin_edit_view_model($this->spreadsheet_model);
$this->_data['view_model']->set_model($model);
$this->_data['view_model']->set_heading('Spreadsheet');
if ($this->form_validation->run() === FALSE)
{
return $this->render('Admin/SpreadsheetEdit', $this->_data);
}
$name = $this->input->post('name', TRUE);
$status = $this->input->post('status', TRUE);
$result = $this->spreadsheet_model->edit([
'name' => $name,
'status' => $status,
], $id);
if ($result)
{
$this->success('Spreadsheet updated.');
return $this->redirect('/admin/spreadsheet/0', 'refresh');
}
$this->_data['error'] = 'Error';
return $this->render('Admin/SpreadsheetEdit', $this->_data);
}
public function bulk_delete()
{
$bulk_items = $this->input->post('bulk_items');
foreach ($bulk_items as $key => $id) {
$this->spreadsheet_model->real_delete($id);
}
echo 'success';
exit();
}
/**
* Function to return spreadsheet data only
*/
public function spreadsheet_data($id)
{
$model = $this->spreadsheet_model->get($id);
$session = $this->get_session();
if (!$model)
{
$this->error('Error');
return redirect('/admin/spreadsheet/0');
}
include_once __DIR__ . '/../../view_models/Spreadsheet_admin_edit_view_model.php';
$this->form_validation = $this->spreadsheet_model->set_form_validation(
$this->form_validation, $this->spreadsheet_model->get_all_edit_validation_rule());
$this->_data['view_model'] = new Spreadsheet_admin_edit_view_model($this->spreadsheet_model);
$this->_data['view_model']->set_model($model);
$this->_data['view_model']->set_heading('Spreadsheet');
return $this->render('Admin/Spreadsheet_view_only', $this->_data);
}
/**
* function to update the sheet
*/
public function update_sheet($id)
{
$model = $this->spreadsheet_model->get($id);
$session = $this->get_session();
if (!$model)
{
$this->error('Error');
echo json_encode(['error'=> 'error']);
exit();
}
$data = file_get_contents("php://input",TRUE);
if($data)
{
$result = $this->spreadsheet_model->edit([
'value' => $data,
], $id);
if ($result)
{
$this->success('Spreadsheet Updated Successfully.');
echo json_encode(['success'=> 'updated']);
exit();
}
}
$this->error('Error');
echo json_encode(['error'=> 'error']);
exit();
}
}