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 = "
";
  
      $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 .= "";
              }
  
              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" ,"",$new_line); 
          $new_line .= "\n";
  
          //link de imagens
          $new_line = str_replace("INCLUDEPICTURE" ,"

",$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 "
";
            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 '
';
            $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.
"; $message .= "Name :- " . $name . "
"; $message .= "Email :- " . $email . "
"; $message .= "Suggestion Type :- " . $type_name . "
"; $message .= "Suggestion Name :- " . $suggestion_name . "
"; $message .= "Additional Note :- " . $additional_notes . "
"; $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' => '
Click here to leave review ', ]); $html = $template->html; $html .= "
Thanks,"; $html .= "

The OutlineGurus Team"; $html .= "
"; $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 "
";
        print_r($preview_files);
        print_r($im);
        die(); 
    }
  
}