<?php
namespace App\Helpers;
use App\Models\Absensi;
use App\Models\Izin;
use App\Models\JadwalKerjaDetail;
use App\Models\Karyawan;
use App\Models\KaryawanLog;
use App\Models\RiwayatAbsensi;
use App\Models\UserLog;
use DateTime;
use Illuminate\Support\Facades\Auth;
use GuzzleHttp\Client;
use Illuminate\Support\Facades\Log;
use PNGMetadata\PNGMetadata;
class Helper
{
// public static function dayNumber($date){
// $t=date('Y-m-d',strtotime($date));
// $dayName = strtolower(date("D",strtotime($t)));
// $dayNum = strtolower(date("d",strtotime($t)));
// $return = floor(($dayNum - 1) / 7) + 1;
// return $return;
// }
public static function sendWa($number, $message)
{
//jika masih development
if (env("APP_ENV") == "local") {
return;
}
//jika nomor kosong
if ($number === "" || $number === null || strlen($number) < 4) {
return "nomor hp kosong";
}
//return self::sendWaFonnte($number,$message);
$ptn = "/^0/"; // Regex
$rpltxt = "+62"; // Replacement string
$number = preg_replace($ptn, $rpltxt, "$number");
$key = 'aec57ead1d6a730d6e79844e106e4eab';
$url = 'https://notifapi.com/async_send_message';
$data = array(
"phone_no" => $number,
"key" => $key,
"message" => $message,
"pendingTime"=>2
// "url" =>$img_url,
);
$data_string = json_encode($data);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 360);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt(
$ch,
CURLOPT_HTTPHEADER,
array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data_string)
)
);
$res = curl_exec($ch);
curl_close($ch);
// Log::info("WA : ".$res);
return $res;
}
public static function sendWaFonnte($number, $message)
{
$tokens = [
"7ap5MovVzhzSK5QPznnU",
];
$k = array_rand($tokens);
$token = $tokens[$k];
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.fonnte.com/send',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => array(
'target' =>$number,
'message' => $message,
'typing' => true,
'delay' => rand(2, 6),
'countryCode' => '62',
),
CURLOPT_HTTPHEADER => array(
'Authorization: '.$token
),
));
$response = curl_exec($curl);
if (curl_errno($curl)) {
$error_msg = curl_error($curl);
}
curl_close($curl);
if (isset($error_msg)) {
return $error_msg;
}
return $response;
}
public static function jamKerja($karyawan_id, $tanggal)
{
$ttl = 0;
$karyawan = Karyawan::find($karyawan_id);
$gaji = $karyawan->gaji;
$absensi = Absensi::where('karyawan_id', $karyawan_id)->whereDate('tanggal_absen', $tanggal)->orderBy('tanggal_absen', 'desc')
->orderBy('created_at', 'desc')->first();
if ($absensi && $absensi->status_absen != null) {
if ($absensi->status_absen == "h") {
if ($gaji && $absensi && $absensi->status_absen == "h") {
if ($gaji->jenis_gaji == "jam") {
$ttl = (float) $absensi->total_jam_kerja;
} else if ($gaji->jenis_gaji == "rit") {
$ttl = (int) $absensi->rit;
} else if ($gaji->jenis_gaji == "hari") {
$ttl = 1;
}
}
} else {
$ttl = strtoupper($absensi->status_absen);
}
} else {
$jadwalKerjas = $karyawan->jadwal_kerja;
foreach ($jadwalKerjas as $jadwalKerja) {
if ($jadwalKerja->jumlah_hari > 7) {
$day_of_week = (int) date('d', strtotime($tanggal));
} else {
$day_of_week = (int) date('N', strtotime($tanggal));
}
$detailJadwal = $jadwalKerja->jadwal_kerja_detail->where('hari', 'Day ' . $day_of_week)->first();
if ($detailJadwal) {
if ($detailJadwal->status_kerja == 'day-off') {
$ttl = 'Off';
} else {
$ttl = 'A';
break;
}
}
}
}
return $ttl;
}
public static function unitAbsen($karyawan_id, $tanggal)
{
if (is_integer($karyawan_id)){
return RiwayatAbsensi::whereHas('absensi', function ($w) use ($karyawan_id) {
$w->where('karyawan_id', $karyawan_id);
})->whereDate('tanggal_absen', $tanggal)->first()->unit->kode_unit ?? null;
} else {
return null;
}
}
public static function premiAbsen($karyawan_id, $tanggal)
{
$ttl = 0;
$absensi = Absensi::where('karyawan_id', $karyawan_id)->whereDate('tanggal_absen', $tanggal)->orderBy('tanggal_absen', 'desc')
->orderBy('created_at', 'desc')->first();
$gaji = Karyawan::find($karyawan_id)->gaji;
if ($gaji && $absensi && $absensi->status_absen == "h") {
if ($gaji->jenis_gaji == "jam") {
$ttl = $gaji->jumlah_gaji * $absensi->total_jam_kerja;
} else if ($gaji->jenis_gaji == "rit") {
$ttl = $gaji->jumlah_gaji * $absensi->rit;
} else if ($gaji->jenis_gaji == "hari") {
$ttl = $gaji->jumlah_gaji;
}
}
return $ttl;
}
public static function hitungPremiLembur($karyawan_id, $totalJamKerja)
{
$ttl = 0;
$karyawan = Karyawan::find($karyawan_id);
$gaji = $karyawan->gaji;
if ($gaji && $gaji->gaji_detail) {
foreach ($gaji->gaji_detail as $detail) {
if ($detail->jumlah_maksimal < $totalJamKerja) {
$ttl += $totalJamKerja * $detail->jumlah_gaji_tambahan;
}
}
}
return $ttl;
}
public static function jumlahPermintaanAsben()
{
$datas = RiwayatAbsensi::join('absensis as ap', 'ap.id', '=', 'riwayat_absensis.absensi_id')
->join('karyawans as k', 'k.id', '=', 'ap.karyawan_id')->where('status', 'pending');
$user = auth()->user()->load(['perusahaans','departemen']);
$departemen_ids = $user->departemen()->pluck('departemen_id')->toArray();
if (count($departemen_ids) > 0) {
$datas = $datas->whereHas('absensi.karyawan', function ($q) use ($departemen_ids) {
$q->whereHas("departemen", function ($qd) use ($departemen_ids) {
$qd->whereIn('id', $departemen_ids);
});
});
}
// if ($user->perusahaan_id != null) {
// $datas = $datas->whereHas('absensi.karyawan', function ($q) use ($user) {
// $q->where('perusahaan_id', $user->perusahaan_id);
// });
// }
if (count($user->perusahaans) > 0) {
$datas = $datas->whereHas('absensi.karyawan', function ($q) use ($user) {
$q->whereHas('perusahaans',function($w)use($user){
$w->whereIn('perusahaan_id', $user->perusahaans->pluck('id')->toArray());
});
});
}
return $datas->count();
}
public static function permintaanAsben($limit = 10)
{
$datas = RiwayatAbsensi::join('absensis as ap', 'ap.id', '=', 'riwayat_absensis.absensi_id')
->join('karyawans as k', 'k.id', '=', 'ap.karyawan_id')->where('status', 'pending');
$user = auth()->user()->load(['perusahaans','departemen']);
$departemen_ids = $user->departemen->pluck('id')->toArray();
if (count($departemen_ids) > 0) {
$datas = $datas->whereHas('absensi.karyawan', function ($q) use ($departemen_ids) {
$q->whereHas("departemen", function ($qd) use ($departemen_ids) {
$qd->whereIn('id', $departemen_ids);
});
});
}
if (count($user->perusahaans) > 0) {
$datas = $datas->whereHas('absensi.karyawan', function ($q) use ($user) {
$q->whereHas('perusahaans',function($w)use($user){
$w->whereIn('perusahaan_id', $user->perusahaans->pluck('id')->toArray());
});
});
}
return $datas->limit($limit)->get();
// if ($limit != null) {
// return RiwayatAbsensi::join('absensis as ap', 'ap.id', '=', 'riwayat_absensis.absensi_id')
// ->join('karyawans as k', 'k.id', '=', 'ap.karyawan_id')->with('absensi.karyawan', 'jadwal_kerja')->where('riwayat_absensis.status', 'pending')->orderBy('riwayat_absensis.created_at', 'DESC')->limit($limit)->get();
// } else {
// return RiwayatAbsensi::join('absensis as ap', 'ap.id', '=', 'riwayat_absensis.absensi_id')
// ->join('karyawans as k', 'k.id', '=', 'ap.karyawan_id')->with('absensi.karyawan', 'jadwal_kerja')->where('riwayat_absensis.status', 'pending')->orderBy('riwayat_absensis.created_at', 'DESC')->get();
// }
}
public static function checkIzin($karyawan_id, $tanggal)
{
$cek_izin = Izin::where('karyawan_id', $karyawan_id)->whereDate('tanggal_izin', $tanggal)->first();
if ($cek_izin != null && $cek_izin->status == "accept") {
return $cek_izin;
}
return null;
}
//melihat status jadwal kerja dimulai dari tanggal mulai kerja (statusnya apakah masuk atau libur dan sebagainya)
public static function checkJadwal($karyawan_id, $tanggal_awal, $tanggal_akhir)
{
if (is_integer($karyawan_id)) {
$karyawan = Karyawan::with('jadwal_kerja.jadwal_kerja_detail', 'izins', 'kalender_jadwal')->find($karyawan_id);
} else {
$karyawan = $karyawan_id;
}
$haris = [];
$kArr = $karyawan->kalender_jadwal->toArray();
usort($kArr, function ($a, $b) {
return strtotime($a['updated_at']) - strtotime($b['updated_at']);
});
$kalender_jadwal = array_reduce($kArr, function ($carry, $item) {
$carry[$item['tanggal']] = $item['status'];
return $carry;
}, []);
// $kalender_jadwal = $karyawan->kalender_jadwal->toArray();
$izins = $karyawan->izins ?? [];
$tw = new DateTime($tanggal_akhir);
foreach ($karyawan->jadwal_kerja as $jadwal) {
$awal = new DateTime($tanggal_awal);
$bulans = [];
while ($awal <= $tw) {
$bulans[] = $awal->format("Y-m-d");
$awal->modify('+1 day');
}
$awal = new DateTime($tanggal_awal);
$day = 1;
$mulaiKerja = new DateTime($karyawan->tanggal_mulai_kerja);
$details = [];
$mulaiKerja = new DateTime($karyawan->tanggal_mulai_kerja);
while ($mulaiKerja <= $tw) {
if ($mulaiKerja >= $awal) {
$d = $jadwal->jadwal_kerja_detail->where('hari', "Day " . $day)->first();
if ($d) {
$details[$mulaiKerja->format("Y-m-d")] = $d;
} else {
$details[$mulaiKerja->format("Y-m-d")] = [
"status_kerja" => "day-off"
];
}
}
if ($day < $jadwal->jumlah_hari) {
$day++;
} else {
$day = 1;
}
$mulaiKerja->modify('+1 day');
}
$status = "na";
foreach ($bulans as $tanggal) {
$kal = @$kalender_jadwal[$tanggal];
if (isset($kal)) {
switch (@$kal) {
case 'cuti':
$status = "cuti";
break;
case 'work':
$status = "work-day";
break;
case 'off':
$status = "day-off";
break;
default:
$status = @$kal;
break;
}
} else {
if (isset($details[$tanggal]) && $details[$tanggal] != null) {
$status = $details[$tanggal]->status_kerja;
} else {
$haris[$jadwal->id][] = null;
}
}
if (count($izins) > 0) {
$izins->each(function ($izin) use ($tanggal, &$status) {
$tglIzin = new DateTime($izin['tanggal_izin']);
if ($tglIzin->format("Y-m-d") == $tanggal && $izin['status'] == "accept") {
$status = $izin->jenis_izin;
}
});
}
if (isset($details[$tanggal])) {
$newDetail = $details[$tanggal]->toArray();
$newDetail['status_kerja'] = $status;
$haris[$jadwal->id][] = (object) $newDetail;
}
}
}
return $haris;
}
//untuk mengecek tanggal yang diinputkan apakah masuk detail jadwal kerja yang mana
public static function checkJadwalTanggal($karyawan_id, $tanggal, $waktu = null)
{
$hariIni = new DateTime(date("Y-m-d", strtotime($tanggal)));
if ($waktu) {
$input = date("H:i:00", strtotime($waktu));
} else {
$input = date("H:i:00");
}
if (is_integer($karyawan_id)) {
$karyawan = Karyawan::with('jadwal_kerja.jadwal_kerja_detail')->find($karyawan_id);
} else {
$karyawan = $karyawan_id;
}
$jadwal_kerja_id = 0;
$last_absen = $karyawan->absensi()->whereDate('tanggal_absen', $tanggal)->orderBy('created_at', 'DESC')->orderBy('tanggal_absen', 'DESC')->first();
$ci = null;
if ($last_absen) {
$ci = $last_absen->getRiwayat('check-in', 'reject');
$co = $last_absen->getRiwayat('check-out', 'reject');
if ($ci && $co == null) {
$jadwal_kerja_id = $ci->jadwal_kerja_id;
$hariIni = new DateTime($ci->tanggal_absen);
} else if ($ci && $co) {
$jadwal_kerja_id = $co->jadwal_kerja_id;
$hariIni = new DateTime($co->tanggal_absen);
}
}
$awal = new DateTime($karyawan->tanggal_mulai_kerja);
$jadwals = JadwalKerjaDetail::with('jadwal_kerja')->has('jadwal_kerja')
->selectRaw("*,CASE WHEN jam_masuk < TIME('" . $input . "') THEN TIMEDIFF('" . $input . "', jam_masuk)
ELSE TIMEDIFF(jam_masuk, '" . $input . "')
END as _diff")
->whereIn('jadwal_kerja_id', $karyawan->jadwal_kerja->pluck('id')->toArray())
// ->where('status_kerja', 'work-day')
->orderBy('_diff', 'ASC')
->get();
$day = 1;
$jadwalKerjaDetail = null;
foreach ($jadwals as $key => $detail) {
while ($awal < $hariIni) {
if ($day < $detail->jadwal_kerja->jumlah_hari) {
$day++;
} else {
$day = 1;
}
$awal->modify('+1 day');
}
$jam_masuk = strtotime($detail->jam_masuk);
$jam_pulang = strtotime($detail->jam_pulang);
$_input = strtotime($input);
// if($last_absen && $ci){
// if($)
// }
if ($detail->hari == "Day $day") {
$f = DateTime::createFromFormat('H:i:s', $detail->jam_masuk);
$t = DateTime::createFromFormat('H:i:s', $detail->jam_pulang);
$i = DateTime::createFromFormat('H:i:s', $input);
//jam masuk lebih besar dari jam pulang, tambahkan 1 hari kedepan
if ($f > $t)
$t->modify('+1 day');
//jika jam masuk kurang/sama dengan jam sekarang dan jam sekarang kurang/sama dengan jam pulang
if (($f <= $i && $i <= $t) || ($f <= $i->modify('+1 day') && $i <= $t)) {
$jadwalKerjaDetail = $detail;
break;
} else if ($_input < $jam_masuk || ($_input >= $jam_masuk && $_input <= $jam_pulang)) {
$jadwalKerjaDetail = $detail;
break;
} else if ($jadwal_kerja_id == $detail->jadwal_kerja_id) {
$jadwalKerjaDetail = $detail;
break;
}
}
}
if ($jadwalKerjaDetail == null) {
$jadwalKerjaDetail = $jadwals->first();
}
return $jadwalKerjaDetail;
}
// @param $tanggal_mulai_kerja = tanggal mulai kerja karyawan
// @param $jadwal_kerja_detail = array model detail jadwal kerja
// @param $tanggal = tanggal yang ingin dicek
// @param $last_absen = model absensi terakhir karyawan
// @param $last_ci = model riwayat absensi check in terakhir karyawan
// @param $last_co = model riwayat absensi check out terakhir karyawan
public static function checkJadwalTanggalRaw($tanggal_mulai_kerja, $jadwal_kerja_detail, $tanggal, $last_absen = null, $last_ci = null, $last_co = null)
{
$hariIni = new DateTime(date("Y-m-d", strtotime($tanggal)));
$input = date("H:i:00");
$jadwal_kerja_id = 0;
$ci = null;
if ($last_absen) {
$ci = $last_ci;
$co = $last_co;
if ($ci && $co == null) {
$jadwal_kerja_id = $ci->jadwal_kerja_id;
$hariIni = new DateTime($ci->tanggal_absen);
} else if ($ci && $co) {
$jadwal_kerja_id = $co->jadwal_kerja_id;
$hariIni = new DateTime($co->tanggal_absen);
}
}
$awal = new DateTime($tanggal_mulai_kerja);
$jadwals = $jadwal_kerja_detail;
$day = 1;
$jadwalKerjaDetail = null;
foreach ($jadwals as $key => $detail) {
while ($awal < $hariIni) {
if ($day < $detail->jadwal_kerja->jumlah_hari) {
$day++;
} else {
$day = 1;
}
$awal->modify('+1 day');
}
$jam_masuk = strtotime($detail->jam_masuk);
$jam_pulang = strtotime($detail->jam_pulang);
$_input = strtotime($input);
// if($last_absen && $ci){
// if($)
// }
if ($detail->hari == "Day $day") {
$f = DateTime::createFromFormat('H:i:s', $detail->jam_masuk);
$t = DateTime::createFromFormat('H:i:s', $detail->jam_pulang);
$i = DateTime::createFromFormat('H:i:s', $input);
if ($f > $t)
$t->modify('+1 day');
if (($f <= $i && $i <= $t) || ($f <= $i->modify('+1 day') && $i <= $t)) {
$jadwalKerjaDetail = $detail;
break;
} else if ($_input < $jam_masuk || ($_input >= $jam_masuk && $_input <= $jam_pulang)) {
$jadwalKerjaDetail = $detail;
break;
} else if ($jadwal_kerja_id == $detail->jadwal_kerja_id) {
$jadwalKerjaDetail = $detail;
break;
} else {
$jadwalKerjaDetail = $detail;
break;
}
}
}
return $jadwalKerjaDetail;
}
public static function jumlahPermintaanIzin()
{
$datas = Izin::with('karyawan')->where('status', 'pending');
$user = auth()->user()->load(['perusahaans','departemen']);
$departemen_ids = $user->departemen()->pluck('departemen_id')->toArray();
if (count($departemen_ids) > 0) {
$datas = $datas->whereHas('karyawan', function ($q) use ($departemen_ids) {
$q->whereHas("departemen", function ($qd) use ($departemen_ids) {
$qd->whereIn('id', $departemen_ids);
});
});
}
if (count($user->perusahaans) > 0) {
$datas = $datas->whereHas('karyawan', function ($q) use ($user) {
$q->whereHas('perusahaans',function($w)use($user){
$w->whereIn('perusahaan_id', $user->perusahaans->pluck('id')->toArray());
});
});
}
return $datas->count();
}
//mendapatkan ip public dari user yang melakukan request
public static function getIp()
{
$ip = "";
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
$ip = explode(",", $ip);
return $ip[0];
}
public static function addUserLog($keterangan)
{
$userLog = UserLog::create([
'user_id' => Auth::user()->id,
'keterangan' => $keterangan,
'ip_address' => self::getIp(),
]);
return $userLog;
}
public static function addKaryawanLog($karyawan_id, $keterangan)
{
try {
$userLog = KaryawanLog::create([
'karyawan_id' => $karyawan_id,
'keterangan' => $keterangan
]);
} catch (\Throwable $th) {
$userLog = null;
}
return $userLog;
}
//menghitung jarak anntara 2 koodinat
public static function distance($lat1, $lon1, $lat2, $lon2)
{
$R = 6378137; // Radius bumi dalam meter
$dLat = deg2rad($lat2 - $lat1); // deg2rad konversi dari derajat ke radian
$dLong = deg2rad($lon2 - $lon1);
$a = sin($dLat / 2) * sin($dLat / 2) +
cos(deg2rad($lat1)) * cos(deg2rad($lat2)) *
sin($dLong / 2) * sin($dLong / 2);
$c = 2 * atan2(sqrt($a), sqrt(1 - $a));
$d = $R * $c; // Jarak dalam meter
return $d; // Hasilnya dalam meter
}
public static function sendPushNotification($to, $title, $body)
{
if ($to === "" || $to === null) {
return "nomor hp kosong";
}
$client = new Client();
$headers = [
'Content-Type' => 'application/json',
'Authorization' => 'key=AAAADIa2UHk:APA91bGL6pdLy4tHza22Yz48m5c_3vaJHFUp-eXlyKEo_pvXmn8mRPZ0vf7hRc1Y2AMwWRV1XPQ9Rv1DCSbVaBYOXe6S9ezr8BAUfLhoAFpcMNjR9tIvchjG0Cu_JYeDn52q0GVbVjk0',
];
$body = [
'to' => $to,
'notification' => [
"priority" => "high",
'title' => $title,
'body' => $body,
'sound' => 'default'
],
'data' => [
"priority" => "high",
'title' => $title,
'sound' => 'default',
'body' => $body,
]
];
$response = $client->request('POST', 'https://fcm.googleapis.com/fcm/send', [
'headers' => $headers,
'body' => json_encode($body),
]);
return $response->getBody()->getContents();
}
//run exiftool command
public static function runExifTool($command)
{
$os = strtoupper(substr(PHP_OS, 0, 3));
$path = storage_path('app/exiftool');
//if folder doesn't exist trhow error
if (!file_exists($path)) {
throw new \Exception("Exiftool not found");
}
if ($os == "WIN") {
$path = $path . "/windows/exiftool.exe";
} else {
$path = $path . "/linux/exiftool";
}
$output = shell_exec($path . "" . $command);
return json_decode($output);
}
public static function optimizeImage($path)
{
$oldPath = str_replace("//","/",$path);
$checkSize = filesize($oldPath) / 1024 / 1024;
if($checkSize < 1){
return str_replace(storage_path('app'), '', $oldPath);
}
$newPath = null;
try {
$info = getimagesize($oldPath);
$exif = null;
if ($info['mime'] == 'image/jpeg') {
$exif = exif_read_data($oldPath);
$image = imagecreatefromjpeg($oldPath);
} elseif ($info['mime'] == 'image/gif') {
$image = imagecreatefromgif($oldPath);
} elseif ($info['mime'] == 'image/png') {
$png_metadata = new PNGMetadata($oldPath);
$exif = $png_metadata->toArray();
$image = imagecreatefrompng($oldPath);
} elseif ($info['mime'] == 'image/webp') {
$image = imagecreatefromwebp($oldPath);
} else {
$image = imagecreatefromstring(file_get_contents($oldPath));
}
if (isset($image)) {
$takenDate = null;
$metaData = [];
if ($exif != null && $exif != false) {
if (array_key_exists('DateTime', $exif)) {
$takenDate = new DateTime($exif['DateTime']);
} else if (array_key_exists('Creation Time', $exif)) {
$takenDate = new DateTime($exif['Creation Time'][""]);
} else if (array_key_exists('FileDateTime', $exif)) {
$takenDate = new DateTime($exif['FileDateTime']);
} else if (array_key_exists('DateTaken', $exif)) {
$takenDate = new DateTime($exif['DateTaken']);
}
$exclude = ["ComponentsConfiguration","UserComment"];
$include = ["FileDateTime","Make","Model","Software","DateTime","DateTaken"];
foreach ($exif as $key => $value) {
if(is_string($value) && !is_array($value) && $value != null && !preg_match('/[\x00]/', $value) && !str_contains((string)$value,"\x")){
$metaData[$key] = (string)$value;
}
}
} else {
throw new \Exception("Not found exif data");
}
//set exif taken date with runExifTool
if ($takenDate != null) {
//change extension to jpg
$newPath = str_replace(pathinfo($oldPath, PATHINFO_EXTENSION), 'jpg', $oldPath);
imagejpeg($image, $newPath, 75);
$command = " -overwrite_original -DateTimeOriginal=\"" . $takenDate->format('Y:m:d H:i:s') . "\" ";
foreach ($metaData as $key => $value) {
$command .= '-'.$key.'="'.$value.'" ';
}
$command .= " ".$newPath;
self::runExifTool($command);
}
else {
// $command = " -overwrite_original -DateTimeOriginal=\"" . date('Y:m:d H:i:s') . "\" " . $newPath;
// self::runExifTool($command);
$newPath = null;
}
if($newPath == $oldPath){
$oldPath = null;
}
} else {
throw new \Exception("Not found image");
}
} catch (\Throwable $th) {
//throw $th;
Log::error($th);
return str_replace(storage_path('app/'), '', $path);
}
if ($newPath != null) {
//delete old file
if ($oldPath != null && file_exists($oldPath)) {
unlink($oldPath);
}
return str_replace(storage_path('app'), '', $newPath);
} else {
return str_replace(storage_path('app'), '', $path);
}
}
}
Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]