Skip to content

Commit

Permalink
Merge pull request #16 from manh21/fix/duplicate
Browse files Browse the repository at this point in the history
fix: duplicate pemilih when importing
  • Loading branch information
manh21 authored Jan 20, 2022
2 parents ba68dc2 + 8bd5c48 commit 14f0bf2
Show file tree
Hide file tree
Showing 3 changed files with 135 additions and 111 deletions.
227 changes: 116 additions & 111 deletions application/controllers/admin/Data_pemilih.php
Original file line number Diff line number Diff line change
Expand Up @@ -280,134 +280,139 @@ public function do_upload()
$this->upload->initialize($config);
$this->form_validation->set_rules('fileURL', 'Upload File', 'callback_checkFileValidation');

if ($this->form_validation->run() == false) {
$this->import();
if (!$this->form_validation->run()) {
$this->import();
return;
}
if (!$this->upload->do_upload('fileURL')) {
return;
}

$upload_data = $this->upload->data();
$fileName = $upload_data['file_name']; //Nama File
$fileType = $upload_data['file_ext'];

$inputFileName = $upload_data['full_path'];

// Creating a Reader
if ($fileType == '.csv') {
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv();
} elseif ($fileType == '.xlsx') {
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
} else {
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
}

if ($this->upload->do_upload('fileURL')) {
// Loading a Spreadsheet File
$spreadsheet = $reader->load($inputFileName);
$sheetData = $spreadsheet->getActiveSheet()->toArray();

$upload_data = $this->upload->data();
$fileName = $upload_data['file_name']; //Nama File
$fileType = $upload_data['file_ext'];
// menghitung jumlah baris data yang ada
$arrayCount = count($sheetData);
$flag = 0;

$inputFileName = $upload_data['full_path'];

// Creating a Reader
if ($fileType == '.csv') {
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv();
} elseif ($fileType == '.xlsx') {
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
} else {
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
$createArray = array('nis', 'username', 'password', 'nama', 'kelas', 'jk');
$makeArray = array('nis' => 'nis', 'username' => 'username', 'password' => 'password', 'nama' => 'nama', 'kelas' => 'kelas', 'jk' => 'jk');
$SheetDataKey = array();
foreach ($sheetData as $dataInSheet) {
foreach ($dataInSheet as $key => $value) {
if (in_array(trim($value), $createArray)) {
$value = preg_replace('/\s+/', '', $value);
$SheetDataKey[trim($value)] = $key;
}
}
}

// Loading a Spreadsheet File
$spreadsheet = $reader->load($inputFileName);
$sheetData = $spreadsheet->getActiveSheet()->toArray();

// menghitung jumlah baris data yang ada
$arrayCount = count($sheetData);
$flag = 0;


$createArray = array('nis', 'username', 'password', 'nama', 'kelas', 'jk');
$makeArray = array('nis' => 'nis', 'username' => 'username', 'password' => 'password', 'nama' => 'nama', 'kelas' => 'kelas', 'jk' => 'jk');
$SheetDataKey = array();
foreach ($sheetData as $dataInSheet) {
foreach ($dataInSheet as $key => $value) {
if (in_array(trim($value), $createArray)) {
$value = preg_replace('/\s+/', '', $value);
$SheetDataKey[trim($value)] = $key;
}
}
$dataDiff = array_diff_key($makeArray, $SheetDataKey);
if (empty($dataDiff)) {
$flag = 1;
}
// match excel sheet column
if ($flag == 1) {
$fetchData = array();
for ($i = 1; $i < $arrayCount; $i++) {
$nis = $SheetDataKey['nis'];
$userName = $SheetDataKey['username'];
$password = $SheetDataKey['password'];
$nama = $SheetDataKey['nama'];
$kelas = $SheetDataKey['kelas'];
$jk = $SheetDataKey['jk'];

$nis = filter_var(trim($sheetData[$i][$nis]), FILTER_SANITIZE_STRING);
$userName = filter_var(trim($sheetData[$i][$userName]), FILTER_SANITIZE_STRING);
$password = filter_var(trim($sheetData[$i][$password]), FILTER_SANITIZE_STRING);
$nama = filter_var(trim($sheetData[$i][$nama]), FILTER_SANITIZE_STRING);
$kelas = filter_var(trim($sheetData[$i][$kelas]), FILTER_SANITIZE_STRING);
$jk = filter_var(trim($sheetData[$i][$jk]), FILTER_SANITIZE_STRING);

// Get idkelas
$idKelas = $this->Data_pemilih_model->get_idKelas($kelas);
if ($idKelas == false) {
$idKelas = '';
} else {
$idKelas = $idKelas->idkelas;
}

$dataDiff = array_diff_key($makeArray, $SheetDataKey);
if (empty($dataDiff)) {
$flag = 1;
}
// match excel sheet column
if ($flag == 1) {
$fetchData = array();
for ($i = 1; $i < $arrayCount; $i++) {
$nis = $SheetDataKey['nis'];
$userName = $SheetDataKey['username'];
$password = $SheetDataKey['password'];
$nama = $SheetDataKey['nama'];
$kelas = $SheetDataKey['kelas'];
$jk = $SheetDataKey['jk'];

$nis = filter_var(trim($sheetData[$i][$nis]), FILTER_SANITIZE_STRING);
$userName = filter_var(trim($sheetData[$i][$userName]), FILTER_SANITIZE_STRING);
$password = filter_var(trim($sheetData[$i][$password]), FILTER_SANITIZE_STRING);
$nama = filter_var(trim($sheetData[$i][$nama]), FILTER_SANITIZE_STRING);
$kelas = filter_var(trim($sheetData[$i][$kelas]), FILTER_SANITIZE_STRING);
$jk = filter_var(trim($sheetData[$i][$jk]), FILTER_SANITIZE_STRING);

// Get idkelas
$idKelas = $this->Data_pemilih_model->get_idKelas($kelas);
if ($idKelas == false) {
$idKelas = '';
} else {
$idKelas = $idKelas->idkelas;
}
$fetchData[] = array(
'nis' => $nis,
'username' => $userName,
'password' => $password,
'nama' => $nama,
'kelas' => $kelas,
'jk' => $jk,
'status' => 'Belum Memilih',
'aktif' => '1',
'idkelas' => $idKelas,
);
}

$dups = [];
foreach($fetchData as $keys => $val){
$res = searchForUsername($val['username'], $fetchData);
if(count($res) > 1){
$dups[] = $res;
}
}

if(!empty($dups)){
$data['dataInfo'] = $fetchData;
$this->Data_pemilih_model->setBatchImport($fetchData);
$this->Data_pemilih_model->importData();
$this->session->set_flashdata(
'message',
'<div class="alert alert-danger alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
Terdapat username ganda silahkan cek kembali data anda! </div>'
);
unlink('./assets/uploads/' . $fileName);
redirect('admin/pemilih', 'refresh');
} else {
$data['dataInfo'] = $fetchData;
$this->Data_pemilih_model->setBatchImport($fetchData);
$this->Data_pemilih_model->importData();
}
} else {
$this->session->set_flashdata(
'message',
'<div class="alert alert-danger alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
Please import correct file, did not match excel sheet column </div>'
);
unlink('./assets/uploads/' . $fileName);
// Check duplicate
$exist = $this->Data_pemilih_model->is_exist($userName, $nis);
if($exist) { continue; }

$fetchData[] = array(
'nis' => $nis,
'username' => $userName,
'password' => $password,
'nama' => $nama,
'kelas' => $kelas,
'jk' => $jk,
'status' => 'Belum Memilih',
'aktif' => '1',
'idkelas' => $idKelas,
);
}

$dups = [];
foreach($fetchData as $keys => $val){
$res = searchForUsername($val['username'], $fetchData);
if(count($res) > 1){
$dups[] = $res;
}
unlink('./assets/uploads/' . $fileName);
}

if(!empty($dups)){
$data['dataInfo'] = $fetchData;
$this->Data_pemilih_model->setBatchImport($fetchData);
$this->Data_pemilih_model->importData();
$this->session->set_flashdata(
'message',
'<div class="alert alert-success alert-dismissible">
'<div class="alert alert-danger alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
Berhasil Mengimport Data </div>'
Terdapat username ganda silahkan cek kembali data anda! </div>'
);
unlink('./assets/uploads/' . $fileName);
redirect('admin/pemilih', 'refresh');
} else {
$data['dataInfo'] = $fetchData;
$this->Data_pemilih_model->setBatchImport($fetchData);
$this->Data_pemilih_model->importData();
}
} else {
$this->session->set_flashdata(
'message',
'<div class="alert alert-danger alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
Please import correct file, did not match excel sheet column </div>'
);
unlink('./assets/uploads/' . $fileName);
}
unlink('./assets/uploads/' . $fileName);
$this->session->set_flashdata(
'message',
'<div class="alert alert-success alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
Berhasil Mengimport Data </div>'
);
redirect('admin/pemilih', 'refresh');
}

/**
Expand Down
1 change: 1 addition & 0 deletions application/controllers/api/Vote.php
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,7 @@ public function vote_post()
'error' => 403,
'message' => 'user sudah memilih'
);
$this->response($message, 200);
}
} else {
$message = array(
Expand Down
18 changes: 18 additions & 0 deletions application/models/Data_pemilih_model.php
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,24 @@ public function delete_data_vote_user($id)
return true;

}

/**
* Check if exist user
* @param string username
* @param string nis
* @return boolean
*/
public function is_exist($username, $nis)
{
$this->db->where('username', $username);
$this->db->or_where('nis', $nis);
$q = $this->db->get('data_pemilih');
if($q->num_rows() > 0){
return true;
}

return false;
}
}

/* End of file Data_pemilih_model.php */
Expand Down

0 comments on commit 14f0bf2

Please sign in to comment.