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

1658 lines
57 KiB
PHP
Executable File

<?php
use Aws\S3\S3Client;
use function GuzzleHttp\Psr7\str;
defined('BASEPATH') || exit('No direct script access allowed');
include_once 'Member_controller.php';
/*Powered By: Manaknightdigital Inc. https://manaknightdigital.com/ Year: 2021*/
/**
* Inventory Controller
* @copyright 2019 Manaknightdigital Inc.
* @link https://manaknightdigital.com
* @license Proprietary Software licensing
* @author Ryan Wong
*
*/
use \Stripe\Stripe;
use \Stripe\Customer;
use \Stripe\Charge;
use \Stripe\Refund;
use \Stripe\Plan;
use \Stripe\Coupon;
use \Stripe\Product;
use \Stripe\Subscription;
use \Stripe\Invoice;
use \Stripe\Error;
use \Stripe\Webhook;
use \Stripe\Source;
use \Stripe\Dispute;
use \Stripe\Token;
use \Stripe\File;
use \Stripe\Exception;
use \Stripe\Event;
use \Stripe\InvoiceItem;
use \Stripe\PaymentMethod;
use \Stripe\PaymentIntent;
class Member_inventory_controller extends Member_controller
{
protected $_model_file = 'inventory_model';
public $_page_name = 'Inventory';
public function __construct()
{
parent::__construct();
$this->load->model('school_model');
$this->load->model('professor_model');
$this->load->model('textbook_model');
$this->load->model('classes_model');
$this->load->model('user_model');
$this->load->model('inventory_model');
$this->load->model('credential_model');
}
function parseWord($userDoc)
{
$fileHandle = fopen($userDoc, "r");
$word_text = @fread($fileHandle, filesize($userDoc));
$line = "";
$tam = filesize($userDoc);
$nulos = 0;
$caracteres = 0;
for($i=1536; $i<$tam; $i++)
{
$line .= $word_text[$i];
if( $word_text[$i] == 0)
{
$nulos++;
}
else
{
$nulos=0;
$caracteres++;
}
if( $nulos>1996)
{
break;
}
}
//echo $caracteres;
$lines = explode(chr(0x0D),$line);
//$outtext = "<pre>";
$outtext = "";
foreach($lines as $thisline)
{
$tam = strlen($thisline);
if( !$tam )
{
continue;
}
$new_line = "";
for($i=0; $i<$tam; $i++)
{
$onechar = $thisline[$i];
if( $onechar > chr(240) )
{
continue;
}
if( $onechar >= chr(0x20) )
{
$caracteres++;
$new_line .= $onechar;
}
if( $onechar == chr(0x14) )
{
$new_line .= "</a>";
}
if( $onechar == chr(0x07) )
{
$new_line .= "\t";
if( isset($thisline[$i+1]) )
{
if( $thisline[$i+1] == chr(0x07) )
{
$new_line .= "\n";
}
}
}
}
//troca por hiperlink
$new_line = str_replace("HYPERLINK" ,"<a href=",$new_line);
$new_line = str_replace("\o" ,">",$new_line);
$new_line .= "\n";
//link de imagens
$new_line = str_replace("INCLUDEPICTURE" ,"<br><img src=",$new_line);
$new_line = str_replace("\*" ,"><br>",$new_line);
$new_line = str_replace("MERGEFORMATINET" ,"",$new_line);
$outtext .= nl2br($new_line);
}
return $outtext;
}
public function index($page)
{
$this->load->library('pagination');
include_once __DIR__ . '/../../view_models/Inventory_member_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 Inventory_member_list_paginate_view_model(
$this->inventory_model,
$this->pagination,
'/member/inventory/0');
$this->_data['view_model']->set_heading('Inventory');
$this->_data['view_model']->set_id(($this->input->get('id', TRUE) != NULL) ? $this->input->get('id', TRUE) : NULL);
$this->_data['view_model']->set_title(($this->input->get('title', TRUE) != NULL) ? $this->input->get('title', TRUE) : NULL);
$this->_data['view_model']->set_school_id(($this->input->get('school_id', TRUE) != NULL) ? $this->input->get('school_id', TRUE) : NULL);
$this->_data['view_model']->set_professor_id(($this->input->get('professor_id', TRUE) != NULL) ? $this->input->get('professor_id', TRUE) : NULL);
$this->_data['view_model']->set_class_id(($this->input->get('class_id', TRUE) != NULL) ? $this->input->get('class_id', TRUE) : NULL);
$this->_data['view_model']->set_textbook_id(($this->input->get('textbook_id', TRUE) != NULL) ? $this->input->get('textbook_id', TRUE) : NULL);
$this->_data['view_model']->set_word_count(($this->input->get('word_count', TRUE) != NULL) ? $this->input->get('word_count', TRUE) : NULL);
$this->_data['view_model']->set_year(($this->input->get('year', TRUE) != NULL) ? $this->input->get('year', TRUE) : NULL);
$this->_data['view_model']->set_status(($this->input->get('status', TRUE) != NULL) ? $this->input->get('status', TRUE) : NULL);
$where = [
'inventory.id' => $this->_data['view_model']->get_id(),
'inventory.title' => $this->_data['view_model']->get_title(),
'inventory.school_id' => $this->_data['view_model']->get_school_id(),
'inventory.professor_id' => $this->_data['view_model']->get_professor_id(),
'inventory.class_id' => $this->_data['view_model']->get_class_id(),
'inventory.textbook_id' => $this->_data['view_model']->get_textbook_id(),
'inventory.word_count' => $this->_data['view_model']->get_word_count(),
'inventory.year' => $this->_data['view_model']->get_year(),
'inventory.status' => $this->_data['view_model']->get_status(),
'inventory.user_id' => $this->session->userdata('user_id'),
];
$this->_data['view_model']->set_total_rows($this->inventory_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('/member/inventory/0');
$this->_data['view_model']->set_page($page);
$this->_data['view_model']->set_list($this->inventory_model->get_paginated(
$this->_data['view_model']->get_page(),
$this->_data['view_model']->get_per_page(),
$where,
$order_by,
$direction));
// load data
$schools = $this->school_model->get_all(['status' => 1]);
$professors = $this->professor_model->get_all(['status' => 1]);
$textbooks = $this->textbook_model->get_all(['status' => 1]);
$classes = $this->classes_model->get_all(['status' => 1]);
$purchase_array = $this->inventory_model->get_current_user_order_count($this->session->userdata('user_id'));
if($purchase_array){
$purchase_array = array_column($purchase_array,'order_count','inventory_id');
}
$refunded_array = $this->inventory_model->get_current_user_refunded_count($this->session->userdata('user_id'));
if($refunded_array){
$refunded_array = array_column($refunded_array,'order_count','inventory_id');
}
// print_r($this->_data['view_model']->get_list());exit;
if( $this->_data['view_model']->get_list()){
//get all school data
$school_data = array_column($schools ,'name','id');
//get all professor data
$professor_data = array_column($professors,'name','id');
//get all classes data
$classes_data = array_column( $classes ,'name','id');
//get all textbook data
$textbook_data = array_column($textbooks ,'isbn','id');
foreach ( $this->_data['view_model']->get_list() as $key => &$value) {
$value->school_id = $school_data[$value->school_id];
$value->professor_id = $professor_data[$value->professor_id];
$value->class_id = $classes_data[$value->class_id];
$value->textbook_id = $textbook_data[$value->textbook_id] ?? '';
if(isset($purchase_array[$value->id]))
$value->purchased_count = $purchase_array[$value->id] ?? 0;
else
$value->purchased_count = 0;
if(isset($refunded_array[$value->id]))
$value->refunded_count = $refunded_array[$value->id] ?? 0;
else
$value->refunded_count = 0;
}
}
if ($format == 'csv')
{
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="export.csv"');
echo $this->_data['view_model']->to_csv();
exit();
}
if (!empty($schools))
{
$this->_data['schools'] = $schools;
}
if (!empty($professors))
{
$this->_data['professors'] = $professors;
}
if (!empty($textbooks))
{
$this->_data['textbooks'] = $textbooks;
}
if (!empty($classes))
{
$this->_data['classes'] = $classes;
}
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('Member/Inventory', $this->_data);
}
public function add()
{
include_once __DIR__ . '/../../view_models/Inventory_member_add_view_model.php';
$session = $this->get_session();
$this->form_validation = $this->inventory_model->set_form_validation(
$this->form_validation, $this->inventory_model->get_all_validation_rule());
$this->_data['view_model'] = new Inventory_member_add_view_model($this->inventory_model);
$this->_data['view_model']->set_heading('Inventory');
$this->load->model('image_model');
$gallery_images = $this->image_model->get_all();
foreach ($gallery_images as $key => $image)
{
if ($image->type == 4)
{
$image->show_url = base_url() . $image->url;
}
else
{
$image->show_url = $image->url;
}$image->type = $this->image_model->type_mapping()[$image->type];
}
$this->_data['gallery_images'] = $gallery_images;
// load data
$schools = $this->school_model->get_all(['status' => 1]);
$professors = $this->professor_model->get_all(['status' => 1]);
$textbooks = $this->textbook_model->get_all(['status' => 1]);
$classes = $this->classes_model->get_all(['status' => 1]);
if (!empty($schools))
{
$this->_data['schools'] = $schools;
}
if (!empty($professors))
{
$this->_data['professors'] = $professors;
}
if (!empty($textbooks))
{
$this->_data['textbooks'] = $textbooks;
}
if (!empty($classes))
{
$this->_data['classes'] = $classes;
}
if ($this->form_validation->run() === FALSE)
{
return $this->render('Member/InventoryAdd', $this->_data);
}
$title = $this->input->post('title', TRUE);
$school_id = $this->input->post('school_id', TRUE);
$professor_id = $this->input->post('professor_id', TRUE);
$class_id = $this->input->post('class_id', TRUE);
$textbook_id = $this->input->post('textbook_id', TRUE);
$word_count = $this->input->post('word_count', TRUE);
$year = $this->input->post('year', TRUE);
$isbn = $this->input->post('isbn', TRUE);
// $paypal_email = $this->input->post('paypal_email', TRUE);
$file = $this->input->post('file', TRUE);
$file_id = $this->input->post('file_id', TRUE);
$feature_image = $this->input->post('feature_image', TRUE);
$feature_image_id = $this->input->post('feature_image_id', TRUE);
$note_type = $this->input->post('note_type', TRUE);
// $description = $this->input->post('description', TRUE);
// $inventory_note = $this->input->post('inventory_note', TRUE);
// $pin_to_top = $this->input->post('pin_to_top', TRUE);
// $approve = $this->input->post('approve', TRUE);
// $status = $this->input->post('status', TRUE);
$session_user_id = $this->session->userdata('user_id');
$result = $this->inventory_model->create([
'title' => $title,
'school_id' => $school_id,
'user_id' => $session_user_id,
'professor_id' => $professor_id,
'class_id' => $class_id,
'textbook_id' => $textbook_id,
'word_count' => $word_count,
'year' => $year,
'isbn' => $isbn,
// 'paypal_email' => $paypal_email,
'file' => $file,
'file_id' => $file_id,
'feature_image' => $feature_image,
'feature_image_id' => $feature_image_id,
'note_type' => $note_type,
// 'description' => $description,
// 'inventory_note' => $inventory_note,
'pin_to_top' => 0,
'approve' => 1,
'status' => 1
]);
if ($result)
{
$this->success('Added successfully');
return $this->redirect('/member/inventory/0', 'refresh');
}
$this->_data['error'] = 'Error';
return $this->render('Member/InventoryAdd', $this->_data);
}
protected function s3_file_upload ()
{
$this->load->model('image_model');
$this->load->library('mime_service');
$s3 = new S3Client([
'version' => $this->config->item('aws_version'),
'region' => $this->config->item('aws_region'),
'endpoint' => $this->config->item('aws_endpoint'),
'use_path_style_endpoint' => true,
'credentials' => [
'key' => $this->config->item('aws_key'),
'secret' => $this->config->item('aws_secret'),
]
]);
// $s3->setEndpoint('s3.us-west-001.backblazeb2.com');
if (!(isset($_FILES) && count($_FILES) > 0 && isset($_FILES['file_upload'])))
{
$output['error'] = 'Upload file failed';
return $output;
}
$file = $_FILES['file_upload'];
$size = $file['size'];
$path = $file['tmp_name'];
$type = $file['type'];
$extension = $this->mime_service->get_extension($type);
if ($size > $this->config->item('upload_byte_size_limit'))
{
$output['error'] = 'Upload file size too big';
return $output;
}
$filename = md5(uniqid() . time()) . $extension;
$width = 0;
$height = 0;
$session = $this->get_session();
$user_id = isset($session['user_id']) ? $session['user_id'] : 0;
try
{
$result = $s3->putObject([
'Bucket' => $this->config->item('aws_bucket'),
'Key' => $filename,
'Body' => fopen($path, 'r'),
'ACL' => 'public-read',
]);
$image_id = $this->image_model->create([
'url' => $result->get('ObjectURL'),
'type' => 5,
'user_id' => $user_id,
'width' => $width,
'caption' => '',
'height' => $height
]);
$output['file'] = $result->get('ObjectURL');
return $output;
}
catch (Aws\S3\Exception\S3Exception $e)
{
echo "<pre>";
print_r($e->getMessage());
die;
$output['error'] = $e->getMessage();
return $output;
}
}
public function add_inventory()
{
include_once __DIR__ . '/../../view_models/Inventory_member_add_view_model.php';
$session = $this->get_session();
$this->form_validation = $this->inventory_model->set_form_validation(
$this->form_validation, $this->inventory_model->get_all_validation_rule());
$this->_data['view_model'] = new Inventory_member_add_view_model($this->inventory_model);
$this->_data['view_model']->set_heading('Inventory');
$this->load->model('image_model');
$gallery_images = $this->image_model->get_all();
foreach ($gallery_images as $key => $image)
{
if ($image->type == 4)
{
$image->show_url = base_url() . $image->url;
}
else
{
$image->show_url = $image->url;
}
$image->type = $this->image_model->type_mapping()[$image->type];
}
$this->_data['gallery_images'] = $gallery_images;
// load data
$schools = $this->school_model->get_all(['status' => 1]);
$professors = $this->professor_model->get_all(['status' => 1]);
$textbooks = $this->textbook_model->get_all(['status' => 1]);
$classes = $this->classes_model->get_all(['status' => 1]);
if (!empty($schools))
{
$this->_data['schools'] = $schools;
}
if (!empty($professors))
{
$this->_data['professors'] = $professors;
}
if (!empty($textbooks))
{
$this->_data['textbooks'] = $textbooks;
}
if (!empty($classes))
{
$this->_data['classes'] = $classes;
}
if ($this->form_validation->run() === FALSE || (!($this->input->post('remember1')) || !($this->input->post('remember2')) ))
{
$this->error(validation_errors());
return $this->redirect('/sell', 'refresh');
}
$file = '';
$preview_files = [];
$file_upload_type = $this->config->item('file_upload');
if ($file_upload_type == 's3')
{
$output = $this->s3_file_upload();
if (isset($output['file']))
{
$file = $output['file'];
}else if( isset($output['error']) )
{
$this->error($output['error']);
return $this->redirect('/sell', 'refresh');
}
}else{
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'doc|docx';
// $config['max_size'] = 100;
$this->load->library('upload', $config);
if ( ! $this->upload->do_upload('file_upload'))
{
$this->error($this->upload->display_errors());
return $this->redirect('/sell', 'refresh');
}
else
{
$data =$this->upload->data();
$file = 'uploads/'.$data['file_name'];
// $this->load->view('upload_success', $data);
}
// echo '<pre>';
$upload_file_prop = pathinfo($file);
// $phpWord = new \PhpOffice\PhpWord\PhpWord();
$type = '';
if( $upload_file_prop['extension'] == 'doc')
{
$type = 'MsDoc';
}
else if( $upload_file_prop['extension'] == 'docx')
{
$type = 'Word2007';
}
if($type=='')
{
$this->error('File Name is not correct');
return $this->redirect('/sell', 'refresh');
}
}
$uri = __DIR__ . "/../../../" . $file;
$error = false;
$api_fileName = '';
$api_folderName = '';
$school_id = $this->input->post('school_id', TRUE);
$professor_id = $this->input->post('professor_id', TRUE);
$class_id = $this->input->post('class_id', TRUE);
$textbook = $this->input->post('textbook', TRUE) ?? '0';
$word_count = $this->input->post('word_count', TRUE);
$year = $this->input->post('year', TRUE);
$note_type = $this->input->post('note_type', TRUE);
$session_user_id = $this->session->userdata('user_id');
$result = $this->inventory_model->create([
'title' => ' ',
'school_id' => $school_id,
'user_id' => $session_user_id,
'professor_id' => $professor_id,
'class_id' => $class_id,
'isbn' => $textbook ?? '',
'word_count' => $word_count,
'year' => $year,
'file' => $file,
'feature_image' => "",
'feature_image2' => "",
'feature_image3' => "",
'note_type' => $note_type,
'pin_to_top' => 0,
'approve' => 1,
'status' => 1
]);
$paypal_email = $this->input->post('paypal_email', TRUE);
if($paypal_email )
{
$this->db->set('paypal_email',$paypal_email)->where('id',$session_user_id)->update('user');
}
if ($result)
{
$this->load->model('email_model');
$this->load->library('mail_service');
$this->mail_service->set_adapter('smtp');
$from_email = $this->config->item('from_email');
$message = "A new outline has been added with ID " . $result . ".";
$this->mail_service->send($from_email, $from_email, "New Outline Added", $message );
$user_data = $this->user_model->get($this->session->userdata('user_id'));
$logo = base_url('assets/frontend/img/logo.png');
//send email to uploader
$template = $this->email_model->get_template('outline_uploaded', [
'name' => $user_data->first_name . " " . $user_data->last_name,
'logo' => $logo,
]);
$this->mail_service->send( $from_email, $this->session->userdata('email'), $template->subject, $template->html);
$this->success('Added successfully');
return $this->redirect('/sell', 'refresh');
}
$this->error('Error');
return $this->redirect('/sell', 'refresh');
}
public function edit($id)
{
$model = $this->inventory_model->get($id);
$session = $this->get_session();
if (!$model)
{
$this->error('Error');
return redirect('/member/inventory/0');
}
include_once __DIR__ . '/../../view_models/Inventory_member_edit_view_model.php';
$this->form_validation = $this->inventory_model->set_form_validation(
$this->form_validation, $this->inventory_model->get_all_edit_validation_rule());
$this->_data['view_model'] = new Inventory_member_edit_view_model($this->inventory_model);
$this->_data['view_model']->set_model($model);
$this->_data['view_model']->set_heading('Inventory');
$this->load->model('image_model');
$gallery_images = $this->image_model->get_all();
foreach ($gallery_images as $key => $image)
{
if ($image->type == 4)
{
$image->show_url = base_url() . $image->url;
}
else
{
$image->show_url = $image->url;
}$image->type = $this->image_model->type_mapping()[$image->type];
}
$this->_data['gallery_images'] = $gallery_images;
// load data
$schools = $this->school_model->get_all(['status' => 1]);
$professors = $this->professor_model->get_all(['status' => 1]);
$textbooks = $this->textbook_model->get_all(['status' => 1]);
$classes = $this->classes_model->get_all(['status' => 1]);
if (!empty($schools))
{
$this->_data['schools'] = $schools;
}
if (!empty($professors))
{
$this->_data['professors'] = $professors;
}
if (!empty($textbooks))
{
$this->_data['textbooks'] = $textbooks;
}
if (!empty($classes))
{
$this->_data['classes'] = $classes;
}
if ($this->form_validation->run() === FALSE)
{
return $this->render('Member/InventoryEdit', $this->_data);
}
// $title = $this->input->post('title', TRUE);
$school_id = $this->input->post('school_id', TRUE);
$professor_id = $this->input->post('professor_id', TRUE);
$class_id = $this->input->post('class_id', TRUE);
$textbook_id = $this->input->post('textbook_id', TRUE) ?? '0';
$word_count = $this->input->post('word_count', TRUE);
$year = $this->input->post('year', TRUE);
$isbn = $this->input->post('isbn', TRUE);
// $paypal_email = $this->input->post('paypal_email', TRUE);
$file = $this->input->post('file', TRUE);
$file_id = $this->input->post('file_id', TRUE);
$feature_image = $this->input->post('feature_image', TRUE);
$feature_image_id = $this->input->post('feature_image_id', TRUE);
$note_type = $this->input->post('note_type', TRUE);
$description = $this->input->post('description', TRUE);
$inventory_note = $this->input->post('inventory_note', TRUE);
// $pin_to_top = $this->input->post('pin_to_top', TRUE);
// $approve = $this->input->post('approve', TRUE);
// $status = $this->input->post('status', TRUE);
$result = $this->inventory_model->edit([
// 'title' => $title,
'school_id' => $school_id,
'professor_id' => $professor_id,
'class_id' => $class_id,
'textbook_id' => $textbook_id,
'word_count' => $word_count,
'year' => $year,
// 'isbn' => $isbn,
// 'paypal_email' => $paypal_email,
// 'file' => $file,
// 'file_id' => $file_id,
// 'feature_image' => $feature_image,
// 'feature_image_id' => $feature_image_id,
'note_type' => $note_type,
// 'description' => $description ?? '',
// 'inventory_note' => $inventory_note ?? '',
'pin_to_top' => 0,
'approve' => 1,
'status' => 1
], $id);
if ($result)
{
$this->success('Updated successfully');
return $this->redirect('/member/inventory/0', 'refresh');
}
$this->_data['error'] = 'Error';
return $this->render('Member/InventoryEdit', $this->_data);
}
public function view($id)
{
$model = $this->inventory_model->get($id);
if (!$model)
{
$this->error('Error');
return redirect('/member/inventory/0');
}
include_once __DIR__ . '/../../view_models/Inventory_member_view_view_model.php';
$this->_data['view_model'] = new Inventory_member_view_view_model($this->inventory_model);
$this->_data['view_model']->set_heading('Inventory');
$this->_data['view_model']->set_model($model);
//get all school data
$this->_data['school_data'] = array_column($this->school_model->get_all(['status' => 1]),'name','id');
//get all professor data
$this->_data['professor_data'] = array_column($this->professor_model->get_all(['status' => 1]),'name','id');
//get all classes data
$this->_data['classes_data'] = array_column($this->classes_model->get_all(['status' => 1]),'name','id');
//get all textbook data
$this->_data['textbook_data'] = array_column($this->textbook_model->get_all(['status' => 1]),'isbn','id');
$this->_data['view_model']->set_school_id( $this->_data['school_data'][$this->_data['view_model']->get_school_id()]);
$this->_data['view_model']->set_professor_id( $this->_data['professor_data'][$this->_data['view_model']->get_professor_id()]);
$this->_data['view_model']->set_class_id( $this->_data['classes_data'][$this->_data['view_model']->get_class_id()]);
// $this->_data['view_model']->set_textbook_id( $this->_data['textbook_data'][$this->_data['view_model']->get_textbook_id()]);
return $this->render('Member/InventoryView', $this->_data);
}
public function dispute_order(){
$this->_data['orders'] = $this->db->query('select * from `order` o where o.id not in (select order_id from ticket where user_id='.$this->session->userdata("user_id").')')->result_array();
return $this->render('Member/Dispute', $this->_data);
}
public function post_dispute(){
if(empty($this->input->get('comment')) || empty($this->input->get('order_id')) ){
$this->_data['status_'] = 'error';
$this->_data['status_msg'] = 'Fill Required Fields';
}else{
$already_disputed = $this->db->select('*')->from('ticket')->where('order_id',intval($this->input->get('order_id')))->get()->row_array();
if(empty( $already_disputed )){
$this->db->insert('ticket',[
'message'=>$this->input->get('comment'),
'user_id'=>$this->session->userdata('user_id'),
'order_id'=>intval($this->input->get('order_id')),
'status'=>0,
'receive_status'=>0,
'created_at'=>date('Y-m-d h:i:s')
]);
$this->load->model('email_model');
$this->load->library('mail_service');
$this->mail_service->set_adapter('smtp');
$user_data = $this->db->select('u.*,c.email')->from('user u')->join('credential c','c.user_id=u.id')->where('u.id',$this->session->userdata('user_id'))->get()->row_array();
$from_email = $this->config->item('from_email');
$domain = explode("@", $from_email)[1];
$template = $this->email_model->get_template('dispute_added', [
'email' => $user_data['email'],
'order_id' =>$this->input->get('order_id'),
]);
$this->mail_service->send( $from_email,$from_email, $template->subject, $template->html);
$this->_data['status_'] = 'success';
$this->_data['status_msg'] = 'Dispute Submitted Successfully.';
}
$this->_data['orders'] = $this->db->query('select * from `order` o where o.id not in (select order_id from ticket where user_id='.$this->session->userdata("user_id").')')->result_array();
}
return $this->render('Member/Dispute', $this->_data);
}
public function review($invetory_id,$order_id){
return $this->render('Member/Review', $this->_data);
}
public function post_review($invetory_id,$order_id){
if(empty($this->input->get('comment')) || empty($this->input->get('review')) || empty($this->input->get('inventory_id')) ){
$this->_data['status_'] = 'error';
$this->_data['status_msg'] = 'Fill Required Fields';
}else{
if($this->db->select('*')->from('review')->where('user_id',$this->session->userdata('user_id'))->where( 'inventory_id',intval($this->input->get('inventory_id')))->get()->result_array()){
$this->_data['status_'] = 'error';
$this->_data['status_msg'] = 'Can not give Review again for same Paper';
}else{
$this->db->insert('review',[
'comment'=>$this->input->get('comment'),
'user_id'=>$this->session->userdata('user_id'),
'rating'=>intval($this->input->get('review')),
'inventory_id'=>intval($this->input->get('inventory_id')),
'order_id'=>intval($order_id),
'status'=>1,
'created_at'=>date('Y-m-d h:i:s')
]);
$this->_data['status_'] = 'success';
$this->_data['status_msg'] = 'Review Submitted Successfully.';
}
}
return $this->render('Member/Review', $this->_data);
}
public function setting(){
$this->_data['paypal_email'] = $this->db->select('paypal_email')->from('user')->where('id',$this->session->userdata('user_id'))->get()->row_array();
return $this->render('Member/Setting', $this->_data);
}
public function post_setting(){
$regex = '/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/';
if(empty($this->input->get('email')) ){
$this->_data['status_'] = 'error';
$this->_data['status_msg'] = 'Enter Email';
}else{
if(!preg_match($regex, $this->input->get('email'))){
$this->_data['status_'] = 'error';
$this->_data['status_msg'] = 'Invalid Email';
}else{
$this->db->set('paypal_email',$this->input->get('email'))
->where('id',$this->session->userdata('user_id'))->update('user');
$this->_data['status_'] = 'success';
$this->_data['status_msg'] = 'Email updated submitted successfully.';
}
}
$this->_data['paypal_email'] = $this->db->select('paypal_email')->from('user')->where('id',$this->session->userdata('user_id'))->get()->row_array();
return $this->render('Member/Setting', $this->_data);
}
public function delete()
{
$id = $this->input->post('id');
$model = $this->inventory_model->get($id);
if (!empty($id))
{
$result = $this->inventory_model->real_delete($id);
if ($result)
{
$output['success'] = TRUE;
$output['status'] = 200;
$output['msg'] = 'Notes deleted successfully.';
echo json_encode($output);
exit();
}
else
{
$output['error'] = TRUE;
$output['status'] = 0;
$output['msg'] = 'Error! Please try again later.';
echo json_encode($output);
exit();
}
}
else
{
$output['error'] = TRUE;
$output['status'] = 0;
$output['msg'] = 'Error! Data not found.';
echo json_encode($output);
exit();
}
}
public function add_suggestion()
{
$this->load->model('suggestion_model');
$this->form_validation = $this->suggestion_model->set_form_validation(
$this->form_validation, $this->suggestion_model->get_all_validation_rule());
$this->form_validation->set_rules('email', 'Email', 'required|valid_email');
$name = $this->input->post('name', TRUE);
$email = $this->input->post('email', TRUE);
$suggestion_type = $this->input->post('suggestion_type', TRUE);
$suggestion_name = $this->input->post('suggestion_name', TRUE);
$additional_notes = $this->input->post('additional_notes', TRUE);
$payload_1 = [
'name' => $name,
'email' => $email,
'suggestion_type' => $suggestion_type,
'suggestion_name' => $suggestion_name,
'additional_notes' => $additional_notes
];
$this->db->trans_begin();
$result_1 = $this->suggestion_model->create($payload_1);
if ($result_1)
{
$this->db->trans_commit();
$res = [
'success' => TRUE,
'status' => 200,
'msg' => 'Success! Suggestion Added.'
];
$type_name = "";
if ($suggestion_type == 1)
{
$type_name = "School";
}else if ($suggestion_type == 2)
{
$type_name = "Professor";
}else if ($suggestion_type == 3)
{
$type_name = "Textbook";
}else if ($suggestion_type == 4)
{
$type_name = "Course";
}
$this->load->model('email_model');
$this->load->library('mail_service');
$this->mail_service->set_adapter('smtp');
$from_email = $this->config->item('from_email');
$message = "A new suggestion has been recieved.<br>";
$message .= "Name :- " . $name . " <br>";
$message .= "Email :- " . $email . " <br>";
$message .= "Suggestion Type :- " . $type_name . " <br>";
$message .= "Suggestion Name :- " . $suggestion_name . " <br>";
$message .= "Additional Note :- " . $additional_notes . " <br>";
$this->mail_service->send($from_email, $from_email, "New Suggestion", $message);
echo json_encode($res);
exit;
}
else
{
$this->db->trans_rollback();
$res = [
'error' => TRUE,
'status' => 0,
'msg' => 'Error! Suggestion add failed.'
];
echo json_encode($res);
exit;
}
}
// public function purchasec(){
// // for demo
// if($this->session->userdata('user_id') && is_numeric($this->input->post('id')) ){
// $this->load->model('email_model');
// $this->load->library('mail_service');
// $this->mail_service->set_adapter('smtp');
// $user_data = $this->db->select('u.*,c.email')->from('user u')->join('credential c','c.user_id=u.id')->where('u.id',$this->session->userdata('user_id'))->get()->row_array();
// $output = [];
// $invetory_data = $this->db->select('i.*,p.name as professor,c.name as class')->from('inventory i ')
// ->join('professor p','p.id=i.professor_id')
// ->join('classes c','c.id=i.class_id')
// ->where('i.id',$this->input->post('id'))->get()->row_array();
// $insert = [
// 'purchase_user_id'=>$user_data['id'],
// 'sale_user_id'=>$invetory_data['user_id'],
// 'inventory_id'=>$invetory_data['id'],
// 'order_date'=>date('Y-m-d'),
// 'order_time'=>date('h:i:s'),
// 'subtotal'=>50,
// 'tax'=>0,
// 'discount'=>0,
// 'total'=>50,
// 'stripe_charge_id'=>'Test11',
// 'stripe_intent'=>json_encode(['test'=>1]),
// 'status'=>1,
// 'created_at'=>date('Y-m-d'),
// 'updated_at'=>date('Y-m-d'),
// ];
// $this->db->insert('order',$insert);
// //send email
// $from_email = $this->config->item('from_email');
// $domain = explode("@", $from_email)[1];
// $template = $this->email_model->get_template('give_review', [
// 'email' => $user_data['email']
// ]);
// $this->mail_service->send('admin@' . $domain , $from_email , $template->subject, $template->html);
// $output['status'] = true;
// $output['file_source'] = base_url().$invetory_data['file'];
// $output['file_name'] = $invetory_data['professor'].'.'.$invetory_data['class'].'.'.$invetory_data['year'];
// $output['extension'] = explode('.',$invetory_data['file'])[1];
// echo json_encode($output);
// exit();
// }else{
// $output['status'] = false;
// echo json_encode($output);
// exit();
// }
// }
public function purchase()
{
if( $this->session->userdata('user_id') && $this->input->post('id') )
{
$this->form_validation->set_rules('card_name', 'Card Name', 'required');
$this->form_validation->set_rules('card_number', 'Card Number', 'required');
$this->form_validation->set_rules('exp_month', 'Card Expiry Month', 'required');
$this->form_validation->set_rules('exp_year', 'Card Expiry Year', 'required');
$this->form_validation->set_rules('card_cvc', 'Card CVC', 'required');
if ($this->form_validation->run() === FALSE)
{
$error_msg = validation_errors();
$output['error_msg'] = $error_msg;
echo json_encode($output);
exit();
}
try
{
$card_number = $this->input->post('card_number', TRUE);
$card_cvc = $this->input->post('card_cvc', TRUE);
$card_name = $this->input->post('card_name', TRUE);
$exp_year = $this->input->post('exp_year', TRUE);
$exp_month = $this->input->post('exp_month', TRUE);
$this->load->model('email_model');
$this->load->library('mail_service');
$this->mail_service->set_adapter('smtp');
//create setup intent used in js
Stripe::setApiKey($this->config->item('stripe_secret_key'));
$user_data = $this->db->select('u.*,c.email')->from('user u')->join('credential c','c.user_id=u.id')->where('u.id',$this->session->userdata('user_id'))->get()->row_array();
if( empty($user_data['stripe_id']) )
{
$obj = Customer::create([
'customer' => [
'email' => $user_data['email'],
],
]);
// $obj = $stripe->customers->create([
// 'email' => $user_data['email'],
// 'payment_method' => $this->input->post('key'),
// ]);
$this->db->set('stripe_id',$obj->id);
$this->db->where('id', $user_data['id']);
$this->db->update('user');
$user_data['stripe_id'] = $obj->id;
}
$token = Token::create([
'card' => [
'number' => $card_number,
'exp_month' => $exp_month,
'exp_year' => $exp_year,
'cvc' => $card_cvc,
],
]);
$stripe_token_id = $token->id;
$stripe_customer_id = $user_data['stripe_id'];
// assign card to the user (not default)
$card_data = Customer::createSource(
$stripe_customer_id,
[
'source' => $stripe_token_id,
]
);
// // add payment method
// $card_response = $stripe->paymentMethods->attach(
// $this->input->post('key'),
// ['customer' => $user_data['stripe_id']]
// );
// $payment_method_id = '';
// if($card_response)
// {
// $payment_method_id = $card_response->id;
// }
// if($payment_method_id=='')
// {
// $data = $stripe->paymentMethods->all([
// 'customer' => $user_data['stripe_id'],
// 'type' => 'card',
// ]);
// foreach ($data->data as $key => $value)
// {
// $payment_method_id = $value->id;
// }
// }
//notes amount
$notes_amount = $this->db->select('value')->from('setting')->where('key','fixed_paper_amount')->get()->row_array();
if( $notes_amount)
{
$notes_amount = $notes_amount['value'];
}else{
$notes_amount = 50;
}
//sales percent
$sale_percent = $this->db->select('value')->from('setting')->where('key','payout_percentage_seller')->get()->row_array();
if( $sale_percent)
{
$sale_percent = $sale_percent['value'];
}else{
$sale_percent = 20;
}
// $payment_intent = $stripe->paymentIntents->create([
// 'amount' => $notes_amount*100,
// 'currency' => 'usd',
// 'confirm' => true,
// 'payment_method' => $payment_method_id,
// 'payment_method_types' => ['card'],
// 'customer' => $user_data['stripe_id'],
// 'capture_method' => 'manual',
// 'description' => 'Buying Papers From Outline Gurus',
// ]);
// $result = $stripe->paymentIntents->capture($payment_intent->id );
$amount = str_replace(",", "", $notes_amount);
$price_total = 0;
$price_total = $amount * 100;
$stripe_customer_id = $user_data['stripe_id'];
$stripe_card_id = $card_data->id;
$result = Charge::create(array(
"amount" => $price_total,
"currency" => "usd",
"customer" => $stripe_customer_id,
"receipt_email" => $this->session->userdata('email'),
"source" => $stripe_card_id,
"description" => 'Buying Papers From OutlineGurus',
));
$invetory_data = $this->db->select('i.*,p.name as professor,c.name as class')->from('inventory i ')
->join('professor p','p.id=i.professor_id')
->join('classes c','c.id=i.class_id')
->where('i.id',$this->input->post('id'))->get()->row_array();
$insert = [
'purchase_user_id' => $user_data['id'],
'sale_user_id' => $invetory_data['user_id'],
'inventory_id' => $invetory_data['id'],
'order_date' => date('Y-m-d'),
'order_time' => date('h:i:s'),
'subtotal' => $notes_amount,
'tax' => 0,
'discount' => 0,
'total' => $notes_amount,
'stripe_charge_id' => $result->id,
'stripe_intent' => json_encode($result),
'status' => 1,
'created_at' => date('Y-m-d'),
'updated_at' => date('Y-m-d'),
];
$this->db->insert('order',$insert);
$order_id = $this->db->insert_id();
//payout table
$insert = [
'user_id' => $invetory_data['user_id'],
'order_id' => $order_id,
'inventory_id' => $invetory_data['id'],
'created_at' => date('Y-m-d'),
'amount' => ($sale_percent*$notes_amount)/100,
'payout_date' => null,
'status' => 0,//unpaid
];
$this->db->insert('payout',$insert);
$logo = base_url('assets/frontend/img/logo.png');
//send email
$from_email = $this->config->item('from_email');
$domain = explode("@", $from_email)[1];
$template = $this->email_model->get_template('give_review', [
'email' => $user_data['first_name'] . " " . $user_data['last_name'],
'link' => '<br><a href="'.base_url().'/member/review/'.$invetory_data['id'].'/'.$order_id.'">Click here to leave review</a> ',
]);
$html = $template->html;
$html .= "<br> Thanks,";
$html .= "<br><br> The OutlineGurus Team";
$html .= "<br> <img src='" . $logo . "' style='width:149px' />";
$email_to_user = $this->mail_service->send( $from_email,$user_data['email'], $template->subject, $html);
$invetory_data2 = $this->inventory_model->get($this->input->post('id'));
$sale_user_data = $this->user_model->get($invetory_data2->user_id);
$email_data = $this->credential_model->get_by_fields(['user_id' => $invetory_data2->user_id]);
//send email to uploader
$template = $this->email_model->get_template('outline_downloaded', [
'name' => $sale_user_data->first_name . " " . $sale_user_data->last_name,
'logo' => $logo,
]);
$send = $this->mail_service->send( $from_email, $email_data->email, $template->subject, $template->html);
$output['status'] = true;
$output['file_name'] = $invetory_data['professor'].'.'.$invetory_data['class'].'.'.$invetory_data['year'];
$output['file_source'] = $invetory_data['file'];
$output['extension'] = explode('.',$invetory_data['file'])[1];
echo json_encode($output);
exit();
}
catch (\Stripe\Exception\CardException $e)
{
$output['error'] = TRUE;
$output['error_msg'] = $e->getError()->message;
echo json_encode($output);
exit();
}
catch (\Stripe\Exception\RateLimitException $e)
{
$output['error'] = TRUE;
$output['error_msg'] = $e->getError()->message;
echo json_encode($output);
exit();
}
catch (\Stripe\Exception\InvalidRequestException $e)
{
$output['error'] = TRUE;
$output['error_msg'] = $e->getError()->message;
echo json_encode($output);
exit();
}
catch (\Stripe\Exception\AuthenticationException $e)
{
$output['error'] = TRUE;
$output['error_msg'] = $e->getError()->message;
echo json_encode($output);
exit();
}
catch (\Stripe\Exception\ApiConnectionException $e)
{
$output['error'] = TRUE;
$output['error_msg'] = $e->message();
echo json_encode($output);
exit();
}
catch (\Stripe\Exception\ApiErrorException $e)
{
$output['error'] = TRUE;
$output['error_msg'] = $e->getError()->message;
echo json_encode($output);
exit();
}
catch (Exception $e)
{
$output['error'] = TRUE;
$output['error_msg'] = $e->getError()->message;
echo json_encode($output);
exit();
}
}
else
{
$output['status'] = false;
echo json_encode($output);
exit();
}
}
protected function pay_using_stripe($amount, $stripe_customer_id, $stripe_card_id)
{
$stripe_secret_key = $this->_config->item('stripe_secret_key');
Stripe::setApiKey( $stripe_secret_key );
$get_user_data = $this->_customer_model->get($user_id);
$get_user_card_data = $this->_customer_cards_model->get($user_card_id);
$stripe_customer_id = $get_user_data->stripe_id;
$stripe_card_id = $get_user_card_data->card_token;
if($stripe_customer_id && $amount)
{
$amount = str_replace(",", "", $amount);
$price_total = 0;
$price_total = $amount * 100;
$stripe_customer_id = $stripe_customer_id;
try
{
$charge = Charge::create(array(
"amount" => $price_total,
"currency" => "usd",
"customer" => $stripe_customer_id,
"source" => $stripe_card_id,
"description" => $description
));
$output['success'] = true;
$output['response'] = $charge;
return $output;
exit();
}
catch (\Stripe\Exception\CardException $e)
{
$output['error'] = TRUE;
$output['error_msg'] = $e->getError()->message;
return $output;
exit();
}
catch (\Stripe\Exception\RateLimitException $e)
{
$output['error'] = TRUE;
$output['error_msg'] = $e->getError()->message;
return $output;
exit();
}
catch (\Stripe\Exception\InvalidRequestException $e)
{
$output['error'] = TRUE;
$output['error_msg'] = $e->getError()->message;
return $output;
exit();
}
catch (\Stripe\Exception\AuthenticationException $e)
{
$output['error'] = TRUE;
$output['error_msg'] = $e->getError()->message;
return $output;
exit();
}
catch (\Stripe\Exception\ApiConnectionException $e)
{
$output['error'] = TRUE;
$output['error_msg'] = $e->getError()->message;
return $output;
exit();
}
catch (\Stripe\Exception\ApiErrorException $e)
{
$output['error'] = TRUE;
$output['error_msg'] = $e->getError()->message;
return $output;
exit();
}
catch (Exception $e)
{
$output['error'] = TRUE;
$output['error_msg'] = $e->getError()->message;
return $output;
exit();
}
}
else
{
$output['error'] = true;
$output['error_msg'] = "Error! Token and Amount is required.";
return $output;
exit();
}
}
public function test_docx()
{
$file = "uploads/test_doc_4.docx";
$uri = __DIR__ . "/../../../" . $file;
//phpinfo();
//die();
$preview_files = [];
try
{
$FilePathPdf = "uploads/" . uniqid() . "pdf-file.pdf";
$rendererLibraryPath = __DIR__ . "/../../../vendor/dompdf/dompdf";
$rendererName = \PhpOffice\PhpWord\Settings::PDF_RENDERER_DOMPDF;
\PhpOffice\PhpWord\Settings::setPdfRenderer($rendererName, $rendererLibraryPath);
\PhpOffice\PhpWord\Settings::setPdfRendererPath($rendererLibraryPath);
$phpWord = \PhpOffice\PhpWord\IOFactory::load($uri);
$pdfWriter = \PhpOffice\PhpWord\IOFactory::createWriter( $phpWord, 'PDF' );
$pdfWriter->save($FilePathPdf);
$document = __DIR__ . "/../../../" . $FilePathPdf;
$im = new imagick($document);
$u_id = uniqid();
if ($im)
{
$im->setIteratorIndex(0);
$im->setResolution(600, 600);
$im->setImageFormat('png');
$im->setImageCompression(imagick::COMPRESSION_ZIP);
$im->setImageCompressionQuality(100);
$im->setCompressionQuality(100);
$uid = __DIR__ . "/../../../uploads/";
$im->writeImage($uid . $u_id . "-ttt.png");
$preview_files[0] = 'uploads/' . $u_id . '-ttt.png';
$im->clear();
$im->destroy();
}
$im2 = new imagick($document);
if ($im2)
{
$im2->setIteratorIndex(1);
$im2->setResolution(600, 600);
$im2->setImageFormat('png');
$im2->setImageCompression(imagick::COMPRESSION_ZIP);
$im2->setImageCompressionQuality(100);
$im2->setCompressionQuality(100);
$uid = __DIR__ . "/../../../uploads/";
$im2->writeImage($uid . $u_id . "-ttt2.png");
$preview_files[1] = 'uploads/' . $u_id . '-ttt2.png';
$im2->clear();
$im2->destroy();
}
$im3 = new imagick($document);
if ($im3)
{
$im3->setResolution(600, 600);
$im3->setImageFormat('png');
$im3->setImageCompression(imagick::COMPRESSION_ZIP);
$im3->setImageCompressionQuality(100);
$im3->setCompressionQuality(100);
$uid = __DIR__ . "/../../../uploads/";
$im3->writeImage($uid . $u_id . "-ttt3.png");
$preview_files[2] = 'uploads/' . $u_id . '-ttt3.png';
$im3->clear();
$im3->destroy();
}
}
catch (\BadMethodCallException $e)
{
echo date('H:i:s'), ' error ...' . $e->getMessage();
}
echo "<pre>";
print_r($preview_files);
print_r($im);
die();
}
}