0 && !empty( $string ) && $string != '' ){ $boolean = true ; } return $boolean ; } function dateFilter( $type, $field, $date_from, $date_to, $year, $month, $day_from, $day_to ){ global $mysqli ; $search = '' ; $array_td = array() ; if( stringCheck( $type ) ){ switch( $type ){ case 'normally' : if( stringCheck( $date_from ) && stringCheck( $date_to ) ){ $search .= " AND ".$field." BETWEEN '".$date_from."' AND '".date( 'Y-m-d', strtotime( $date_to ) +86400 )."'" ; }else{ $search .= " AND ".$field." BETWEEN '".date( 'Y-m-01' )."' AND '".date( 'Y-m-d', strtotime( TODAYDATE ) +86400 )."'" ; } break ; case 'yearly' : $start_loop = STARTYEAR ; $end_loop = THISYEAR ; break ; case 'monthly' : if( stringCheck( $year ) ){ $start_loop = 1 ; $end_loop = 12 ; $search = " AND ".$field." LIKE '".$year."%'" ; } break ; case 'daily' : if( stringCheck( $year ) && stringCheck( $month ) ){ if( stringCheck( $day_from ) || stringCheck( $day_to ) ){ $start_loop = $day_from ; $end_loop = $day_to ; $search .= " AND ".$field." BETWEEN '".$year."-".$month."-".$day_from."' AND '".date( 'Y-m-d', strtotime( $year."-".$month."-".$day_to ) +86400 )."'" ; }else{ $start_loop = 1 ; $end_loop = 31 ; $search .= " AND ".$field." LIKE '%".$year."-".$month."%'" ; } } break ; } if( stringCheck( $start_loop ) && stringCheck( $end_loop ) ){ for( $a = $start_loop ; $a <= $end_loop ; $a++ ){ $reset_a = strPad( 2, $a ) ; switch( $type ){ case 'yearly' : $array_td[] = $reset_a ; break ; case 'monthly' : $array_td[] = $reset_a ; break ; case 'daily' : if( $reset_a >= date( '01', strtotime( $year.'-'.$month ) ) && $reset_a <= date( 't', strtotime( $year.'-'.$month ) ) ){ $array_td[] = $year.'-'.$month.'-'.$reset_a ; } break ; } } } } $array['array_date'] = $array_td ; $array['search'] = $search ; return $array ; } function resetRequest( $array ){ if ( arrayCheck( $array ) ){ foreach ( $array as $key => $value ){ if ( arrayCheck( $value ) ){ $array[$key] = resetRequest( $value ) ; }else{ $array[$key] = escapeString( $value ) ; } } } return $array ; } function getLimit( $current ){ return ( ( $current - 1 ) * LIMIT ) . ',' . LIMIT ; } // upload image function uploadImage($path, $file_name, $source){ $result = false ; $split = explode(',', substr($source, 5), 2) ; $mime = trim( $split[0] ) ; $img_data = trim( $split[1] ) ; $mime_split_without_base64 = explode(';', $mime, 2) ; $mime_split = explode('/', $mime_split_without_base64[0], 2) ; if ( count($mime_split) == 2 ) { $extension = $mime_split[1] ; $extension = ( $extension == 'jpeg' ? 'jpg' : $extension ) ; $new_extension = '' ; switch ( $extension ){ case "jpeg" : case "jpg" : $new_extension = 'jpg' ; break ; case "png" : $new_extension = 'png' ; break ; case "gif" : $new_extension = 'gif' ; break ; case "msword" : $new_extension = 'docx' ; break ; case "pdf" : $new_extension = 'pdf' ; break ; case "vnd.ms-excel" : $new_extension = 'xlsx' ; break ; } if ( $new_extension != '' ){ $decoded = base64_decode($img_data) ; $file_name = $file_name . '-' . time() . '-' . rand(000000, 999999) . '.' . $new_extension ; $file_type = $new_extension ; $s = $_SERVER["DOCUMENT_ROOT"].'/uploads/'.$path.'/'.$file_name ; $b = $_SERVER["DOCUMENT_ROOT"].'/uploads/'.$path.'/b/'.$file_name ; $is_upload = false ; switch ( $new_extension ){ case "jpeg" : case "jpg" : case "png" : case "gif" : if( file_put_contents( $s, $decoded ) && file_put_contents( $b, $decoded ) ) { $is_upload = true ; } break ; default : if( file_put_contents( $s, $decoded ) ) { $is_upload = true ; } } if( $is_upload ) { return [ 'status' => '200', 'message' => 'Success', 'data' => [ 'file_name' => $file_name, 'file_type' => $file_type ] ] ; } } } return [ 'status' => '306', 'message' => 'Failed', 'data' => [] ] ; } function convertMinutes($time){ $time = explode(':', $time); return ($time[0]*60) + ($time[1]) + ($time[2]/60) ; } function convertToTimes($minutes){ $hours = strPad( 2, floor( $minutes / 60 ) ) ; $min = strPad( 2, floor( $minutes - ( $hours * 60 ) ) ) ; return $hours.":".$min.":00" ; } // prevent new line, convert \n or enter to br function escapeNewLine($value){ $value = trim( preg_replace( '/(\r\n)|\n|\r/', '
', $value ) ); return trim( preg_replace('/\s+/', ' ', $value) ) ; } // convert br to \n or enter function brToNewLine($value){ $breaks = array("
", "
", "
") ; return str_ireplace($breaks, "\r\n", $value) ; } // check spam email function spamcheck($field){ $field=filter_var($field, FILTER_SANITIZE_EMAIL); if(filter_var($field, FILTER_VALIDATE_EMAIL)){ return TRUE; } else{ return FALSE; } } // remove last comma function removeLastComma($value, $type = ','){ $value = rtrim(trimData($value), $type) ; return $value ; } // remove last 3 string function subStrChar($value, $start, $end){ return substr(trimData($value), $start, $end) ; } // entity decode function entityDecode($value){ $value = html_entity_decode($value) ; return $value ; } // trim data function trimData($value){ $value = trim($value) ; return $value ; } function explodeToArray( $string ){ $array = [] ; if ( $string != '' ){ $new_string = explode(',', $string) ; foreach ( $new_string as $k => $v ){ if ( $v != '' ){ $array[] = dataFilter( $v ) ; } } } return $array ; } // self custom array function customFilterArray($value){ $result = false ; if (dataFilter($value) != ''){ $value = str_replace('') ; $value = explode('>', $value) ; if (arrayCheck($value)){ $result = true ; } } $array['result'] = $result ; $array['content'] = $value ; return $array ; } // insert database filter string function resetString($value){ $value = htmlspecialchars($value, ENT_QUOTES) ; return $value ; } // check array is it true function arrayCheck( $array ){ if ( $array != null ){ if ( is_array($array) ){ if ( count($array) > 0 ){ return true ; } } } return false ; } // check check value exsits function checkValueExists($value){ $result = false ; if (isset($value) && !empty($value)){ $result = true ; } return $result ; } // check if value exists function checkArrayValueExists($array, $key, $val) { if (arrayCheck($array)){ foreach ($array as $item){ if (isset($item[$key]) && $item[$key] == $val){ return true; } } } return false; } // select box for loop function selectForLoopNumber($name, $selected, $start, $end, $type, $required, $run_out){ $select = ' ' ; return $select ; } // trash page function trashPage($page, $mysqli, $query, $trash){ $multiple_trash = array() ; $multiple_trash = $trash ; $boolean = true ; if (arrayCheck($multiple_trash)){ foreach($multiple_trash as $key => $value){ // trash query if ($value == '1' && $mysqli->query($query . $key)){ $boolean = true ; }else{ $boolean = false ; } } }else{ $boolean = false ; } return $boolean ; } // duplicate or clone new order function duplicateMySQLRecord ($action, $type, $table, $array_field, $id, $search_query) { global $mysqli, $prefixQuotation, $prefixQuotationJob ; $new_id = '' ; $prefix_table = '' ; $prefix_data = '' ; $prefix_level = 'sub' ; $id = dataFilter($id) ; $id_field = $array_field['id'] ; $related_type_field = $array_field['related_type'] ; $related_id_field = $array_field['related_id'] ; $related_action_field = $array_field['related_action'] ; $version_field = $array_field['version'] ; $status_field = $array_field['status'] ; $date_filed = $array_field['date'] ; $modified_filed = $array_field['modified'] ; $date_start_filed = $array_field['date_start'] ; // load the original record into an array $mysqli_query = $mysqli->query("SELECT * FROM ".$table." WHERE ".$id_field." = '".$id."' ".$search_query." LIMIT 1") ; if ($mysqli_query->num_rows > 0){ $row_record = $mysqli_query->fetch_array(MYSQLI_ASSOC) ; $main_related_id = $row_record[$related_id_field] ; // total page exists if ( $action == 'clone' ){ $mysqli_version = $mysqli->query("SELECT * FROM ".$table." WHERE ".$related_id_field." = '".$main_related_id."' AND quotation_type = '".$type."'") ; $total_version = $mysqli_version->num_rows ; }else{ $total_version = 0 ; } $total_version++ ; // check the type switch($type){ case 'order' : case 'job-list' : case 'tax-invoice' : // get so number $form_submit = $row_record['quotation_type'] ; // check if invoice type switch($type){ case 'job-list' : $prefix_level = 'main' ; $form_submit = 'job-list' ; $prefix_table .= ", quotation_type, quotation_status" ; $prefix_data .= ", 'job-list', 'pending'" ; break ; case 'tax-invoice' : $prefix_level = 'main' ; $form_submit = 'tax-invoice' ; $prefix_table .= ", quotation_type, quotation_status" ; $prefix_data .= ", 'tax-invoice', 'unpaid'" ; break ; } $system_company_id = $row_record['quotation_company_id'] ; $so_number = soNumber($form_submit) ; $prefix_table .= ", quotation_so" ; $prefix_data .= ", '".$so_number."'" ; break ; } if ( $table == $prefixQuotation && $action == 'clone' ){ // list all related id field $mysqli->query("UPDATE $prefixQuotation SET quotation_related_action = 'hide' WHERE quotation_related_id = '".$main_related_id."' AND quotation_type = '".$type."' AND quotation_trash = '0'") ; } // insert the new record and get the new auto_increment id if ($mysqli->query("INSERT INTO ".$table." (".$related_type_field.", ".$related_id_field.", ".$related_action_field.", ".$version_field.", ".$id_field.", ".$date_filed.", ".$modified_filed.", ".$date_start_filed." ".$prefix_table.") VALUES ('".$prefix_level."', '".$main_related_id."', 'show', '".$total_version."', 'NULL', '".TODAYDATE."', '".TODAYDATE."', '".TODAYDATE."' ".$prefix_data.")")){ $new_id = $mysqli->insert_id ; // generate the query to update the new record with the previous values $new_query = "UPDATE ".$table." SET " ; foreach ($row_record as $key => $value) { if (in_array($key, $array_field)) { }else{ $new_query .= ('`'.$key.'` = "'.str_replace('"','\"',$value).'", ') ; } } // lop off the extra trailing comma $new_query = substr($new_query,0,strlen($new_query)-2) ; $new_query .= " WHERE ".$id_field." = '".$new_id."'" ; $mysqli->query($new_query) ; } } // return the new id return $new_id ; } function checkCookieLogin(){ // check if user has been remembered if ($_COOKIE['system_id'] != '' && $_COOKIE['system_name'] != '' && $_COOKIE['system_branch'] != '' && $_COOKIE['system_permission'] != ''){ // keep in session $_SESSION['system_id'] = $_COOKIE['system_id'] ; $_SESSION['system_name'] = $_COOKIE['system_name'] ; $_SESSION['system_branch'] = $_COOKIE['system_branch'] ; $_SESSION['system_permission'] = $_COOKIE['system_permission'] ; // refresh page to check session header('Refresh: 0') ; exit ; } } function getAllTier( $lang = 'en' ){ global $mysqli ; $array_tier = [] ; $mysqli_tier = $mysqli->query( "SELECT a.tier_id, a.level, b.title FROM profile_tier a LEFT JOIN profile_tier_translation b ON ( a.tier_id = b.tier_id ) WHERE a.deleted_at IS NULL AND b.lang = '".$lang."'" ) ; if ( $mysqli_tier->num_rows > 0 ){ while ( $row_tier = $mysqli_tier->fetch_assoc() ){ $array_tier[$row_tier['tier_id']] = $row_tier ; } } return $array_tier ; } function getRelatedTierID( $is_include, $level ){ global $mysqli ; $array_tier = [] ; $search_query = '' ; if ( $is_include == 'yes' ){ $search_query .= " AND level >= '".$level."'" ; }else{ $search_query .= " AND level > '".$level."'" ; } $mysqli_tier = $mysqli->query( "SELECT tier_id FROM profile_tier WHERE deleted_at IS NULL " . $search_query . " ORDER BY level ASC" ) ; if ( $mysqli_tier->num_rows > 0 ){ while ( $row_tier = $mysqli_tier->fetch_assoc() ){ $array_tier[] = $row_tier['tier_id'] ; } } return $array_tier ; } function getTier( $staff_tier, $lang = 'en' ){ global $mysqli ; $level = -1 ; $title = '' ; $is_task = 'no' ; $is_task_assigned = 'no' ; $is_task_incentive = 'no' ; $is_task_incentive2 = 'no' ; $is_task_extra = 'no' ; $is_adjustment = 'no' ; $mysqli_tier = $mysqli->query("SELECT a.level, a.is_task, a.is_task_assigned, a.is_task_incentive, a.is_task_incentive2, a.is_task_extra, a.is_adjustment, b.title FROM profile_tier a LEFT JOIN profile_tier_translation b ON ( a.tier_id = b.tier_id ) WHERE a.deleted_at IS NULL AND b.lang = '".$lang."' AND a.tier_id = '".$staff_tier."' LIMIT 1") ; if ( $mysqli_tier->num_rows > 0 ){ $row_tier = $mysqli_tier->fetch_assoc() ; $level = $row_tier['level'] ; $title = $row_tier['title'] ; $is_task = $row_tier['is_task'] ; $is_task_assigned = $row_tier['is_task_assigned'] ; $is_task_incentive = $row_tier['is_task_incentive'] ; $is_task_incentive2 = $row_tier['is_task_incentive2'] ; $is_task_extra = $row_tier['is_task_extra'] ; $is_adjustment = $row_tier['is_adjustment'] ; } return [ 'level' => $level, 'title' => $title, 'is_task' => $is_task, 'is_task_assigned' => $is_task_assigned, 'is_task_incentive' => $is_task_incentive, 'is_task_incentive2' => $is_task_incentive2, 'is_task_extra' => $is_task_extra, 'is_adjustment' => $is_adjustment ] ; } // sort by subarray function cmpBySortable($a, $b) { return $a["cart_sortable"] - $b["cart_sortable"]; } // change number to wording function numtowords($num, $currency){ $decones = array( '01' => "One", '02' => "Two", '03' => "Three", '04' => "Four", '05' => "Five", '06' => "Six", '07' => "Seven", '08' => "Eight", '09' => "Nine", 10 => "Ten", 11 => "Eleven", 12 => "Twelve", 13 => "Thirteen", 14 => "Fourteen", 15 => "Fifteen", 16 => "Sixteen", 17 => "Seventeen", 18 => "Eighteen", 19 => "Nineteen" ) ; $ones = array( 0 => " ", 1 => "One", 2 => "Two", 3 => "Three", 4 => "Four", 5 => "Five", 6 => "Six", 7 => "Seven", 8 => "Eight", 9 => "Nine", 10 => "Ten", 11 => "Eleven", 12 => "Twelve", 13 => "Thirteen", 14 => "Fourteen", 15 => "Fifteen", 16 => "Sixteen", 17 => "Seventeen", 18 => "Eighteen", 19 => "Nineteen" ) ; $tens = array( 0 => "", 1 => "Ten", 2 => "Twenty", 3 => "Thirty", 4 => "Forty", 5 => "Fifty", 6 => "Sixty", 7 => "Seventy", 8 => "Eighty", 9 => "Ninety" ) ; $hundreds = array( "Hundred", "Thousand", "Million", "Billion", "Trillion", "Quadrillion" ) ; // limit t quadrillion $num = number_format($num,2,".",",") ; $num_arr = explode(".", $num) ; $wholenum = $num_arr[0] ; $decnum = $num_arr[1] ; $whole_arr = array_reverse(explode(",", $wholenum)) ; krsort($whole_arr) ; $rettxt = "" ; foreach($whole_arr as $key => $i){ if($i < 20){ $length_id = strlen($i) ; if ($length_id == 3){ $i = substr($i, 1) ; } $rettxt .= $ones[$i] ; } elseif($i < 100){ // remove 0 infront $reset_value = ltrim($i, '0') ; // continue wording $rettxt .= $tens[substr($reset_value,0,1)] ; $rettxt .= " ".$ones[substr($reset_value,1,1)] ; } else{ $rettxt .= $ones[substr($i,0,1)]." ".$hundreds[0] ; if ($decnum > 0){ $rettxt .= ' ' ; }else{ $rettxt .= ' and ' ; } $splite_txt = (substr($i,1,1).substr($i,2,1)) ; if ($splite_txt >= 10 && $splite_txt < 20){ $rettxt .= $ones[$splite_txt] ; }else{ $rettxt .= $tens[substr($i,1,1)] ; $rettxt .= ' '.$ones[substr($i,2,1)] ; } } if($key > 0){ $rettxt .= " ".$hundreds[$key]." " ; } } $rettxt = $rettxt." ".$currency ; if($decnum > 0){ $rettxt .= " and " ; if($decnum < 20){ $rettxt .= $decones[$decnum] ; } elseif($decnum < 100){ $rettxt .= $tens[substr($decnum,0,1)] ; $rettxt .= " ".$ones[substr($decnum,1,1)] ; } $rettxt = $rettxt . ($decnum == 1 ? " cent" : " cents") ; } return $rettxt . ' ONLY' ; } // Product pagination function nextPrevious($current_page, $limit_page, $search, $query) { global $mysqli ; // today date $today_date = date('Y-m-d', time()) ; // get query $mysqli_product = $mysqli->query($query) ; // total page $total = $mysqli_product->num_rows ; $total_page = ceil($total / $limit_page) ; $end_number = ($total - (($current_page - 1) * $limit_page)) ; // start pagination if ($total_page <= 1){ $search_result = '
Total result: '.$total.'
'; } else{ // explode url $explode_url = explode('&page=', $url, 2); // Calculating the starting and endign values for the loop if ($current_page >= 7) { $start_loop = $current_page - 3; if ($total_page > $current_page + 3) $end_loop = $current_page + 3; else if ($current_page <= $total_page && $current_page > $total_page - 6) { $start_loop = $total_page - 6; $end_loop = $total_page; } else { $end_loop = $total_page; } } else { $start_loop = 1; if ($total_page > 7) $end_loop = 7; else $end_loop = $total_page; } // End calculating the starting and endign values for the loop $search_result = '
Total result: '.$total.'
    '; // previous linking if ($current_page > 1) { $prev = $current_page - 1; $search_result .= ' ' ; } // pagination number for ($i = $start_loop; $i <= $end_loop; $i++) { $search_result .= '
  • '.$i.'
  • ' ; } // show last page if ($current_page <= ($total_page - 4)){ $search_result .= '
  • ... Last
  • ' ; } // next linking if ($current_page < $total_page) { $next = $current_page + 1; $search_result .= ' ' ; } $search_result .= '
' ; } $array['page_total'] = ($total != '' ? $total : 0) ; $array['page_pagination'] = $search_result ; $array['page_end'] = $end_number ; return $array; } /************************************************************************************* Resize Image *************************************************************************************/ function reCreateImage($path, $page, $title, $position, $image, $type, $source, $status = ''){ // Image uploads when exists $image = $image ; $imagetype = $type ; $source_file = $source ; $explode_type = pathinfo($image, PATHINFO_EXTENSION); $flag = false ; switch($imagetype){ case 'image/jpg': case 'image/jpeg': $ext_type = 'jpg' ; $flag = true ; break ; case 'image/png': $ext_type = 'png' ; $flag = true ; break ; } // check if image not exists if ($image != ''){ // check if image type not jpeg or png if ($flag){ // image $image_name = $title.($status != '' ? '-'.$status : '').'-'.$page.'.'.$ext_type; $dir_img = $_SERVER['DOCUMENT_ROOT'].'/uploads/'.$path.'/m/'.$image_name ; $dir_img_ori = $_SERVER['DOCUMENT_ROOT'].'/uploads/'.$path.'/b/'.$image_name ; // move file to selected directory if (move_uploaded_file($source_file, $dir_img_ori)){ list($img_width,$img_height) = getimagesize($dir_img_ori); // resize image 2000 x height ? $modwidth_2000 = 1080 ; $diff_2000 = $img_width / $modwidth_2000 ; $modheight_2000 = $img_height / $diff_2000 ; // resize image 500 x height ? $modwidth = 500; $diff = $img_width / $modwidth; $modheight = $img_height / $diff; // keep resize image into array $dir_img_crop = array( array( 'width' => $modwidth_2000, 'height' => $modheight_2000, 'type' => 'auto', 'watermark' => $_SERVER['DOCUMENT_ROOT'].'/images/watermark_800.png', 'source' => $dir_img_ori ), array( 'width' => $modwidth, 'height' => $modheight, 'type' => 'auto', 'watermark' => $_SERVER['DOCUMENT_ROOT'].'/images/watermark_800.png', 'source' => $dir_img ), array( 'width' => '400', 'height' => '400', 'type' => 'crop', 'watermark' => $_SERVER['DOCUMENT_ROOT'].'/images/watermark_100.png', 'source' => $_SERVER['DOCUMENT_ROOT'].'/uploads/'.$path.'/'.$image_name ) ) ; // return result as array $array['result'] = true ; $array['image'] = $image_name ; $array['original'] = $dir_img_ori ; $array['extension'] = $ext_type ; $array['position'] = $position ; $array['merge_watermark'] = $status ; $array['crop'] = $dir_img_crop ; } }else{ $array['result'] = false ; $array['result_message'] = 'error-type' ; } } return $array ; } // check title function checkTitle($title, $page){ global $mysqli ; $title = escapeString($title) ; $title = stripNonAlphaNumeric($title) ; $title = $title != '' ? $title : 'No Title' ; $title = strtolower(str_replace(" ", "-", $title)) ; $title = strtolower(str_replace(" ", "-", $title)) ; if (substr($title, -1) == '-'){ $title = substr_replace($title, '', -1) ; } $mysqli_check = $mysqli->query("SELECT * FROM system_post WHERE post_id != '".$page."' AND post_link = '".$title."' AND post_trash = '0' ORDER BY (post_status+0) DESC"); if ($mysqli_check->num_rows > 0){ $status = 1; $check_title = 0; while($check_title == 0){ $new_title = $title.$status; $new_title = stripNonAlphaNumeric($new_title); $new_title = strtolower(str_replace(" ", "-", $new_title)); $new_title = strtolower(str_replace(" ", "-", $new_title)); if (substr($title, -1) == '-'){ $title = substr_replace($title, '', -1) ; } $mysqli_check = $mysqli->query("SELECT * FROM system_post WHERE post_id != '".$page."' AND post_link = '".$new_title."' AND post_trash = '0' ORDER BY (post_status+0) DESC"); if ($mysqli_check->num_rows > 0){ $check_title = 0; } else{ $check_title = 1; } $status++; } $title = $new_title; } else{ $status = 0; } $array['title'] = $title ; $array['status'] = $status ; return $array ; } // check product title if exists function titleExists($mysqli, $prefix_post, $id, $title){ $boolean_result = false ; if ($title != ''){ // check id if ($id != ''){ $search_query = " AND post_id != '".$id."'" ; } // query for product $mysqli_product = $mysqli->query("SELECT post_title FROM system_post WHERE post_title = '".$title."' AND post_type = 'product' AND post_trash = '0' ".$search_query." LIMIT 1") ; // check if product exist if ($mysqli_product->num_rows == 0){ $boolean_result = true ; } } return $boolean_result ; } // replace numeric string function stripNonAlphaNumeric($string) { return preg_replace("/[^a-zA-Z0-9\s]/", "", $string); } // number format with 2 decimal function numberFormat($price, $digit = 2, $type = ''){ $price = number_format($price, $digit, '.', $type) ; return $price ; } // check if number function numberCheck($value){ $value = ($value > 0 ? $value : 0) ; return $value ; } // product breadcrumbs function productBreadcrumbs($page_id){ global $mysqli, $selected_page ; // start loop breadcrumbs $mysqli_breadcrumbs = $mysqli->query("SELECT post_id, post_title, post_parent FROM system_post WHERE post_id = '".$page_id."' AND post_trash = '0' LIMIT 1") ; $row_breadcrumbs = $mysqli_breadcrumbs->fetch_array(MYSQLI_ASSOC) ; // page title $title = dataFilter($row_breadcrumbs['post_title']) ; // keep title in breadcrumbs $breadcrumbs = $title ; // post parent $post_parent = $row_breadcrumbs['post_parent'] ; while ($post_parent != 0){ $mysqli_breadcrumbs = $mysqli->query("SELECT post_id, post_title, post_parent FROM system_post WHERE post_id = '".$post_parent."' AND post_trash = '0' LIMIT 1") ; $row_breadcrumbs = $mysqli_breadcrumbs->fetch_array(MYSQLI_ASSOC) ; // keep title in breadcrumbs // page title $title = dataFilter($row_breadcrumbs['post_title']) ; $breadcrumbs = ''.$title.' / '.$breadcrumbs ; // post parent $post_parent = $row_breadcrumbs['post_parent'] ; } $breadcrumbs = 'Main Category'.($breadcrumbs != '' ? ' / '.$breadcrumbs : '') ; return $breadcrumbs; } // get my current ip function get_client_ip() { $ipaddress = ''; if (getenv('HTTP_CLIENT_IP')) $ipaddress = getenv('HTTP_CLIENT_IP'); else if(getenv('HTTP_X_FORWARDED_FOR')) $ipaddress = getenv('HTTP_X_FORWARDED_FOR'); else if(getenv('HTTP_X_FORWARDED')) $ipaddress = getenv('HTTP_X_FORWARDED'); else if(getenv('HTTP_FORWARDED_FOR')) $ipaddress = getenv('HTTP_FORWARDED_FOR'); else if(getenv('HTTP_FORWARDED')) $ipaddress = getenv('HTTP_FORWARDED'); else if(getenv('REMOTE_ADDR')) $ipaddress = getenv('REMOTE_ADDR'); else $ipaddress = 'unknown'; return $ipaddress; } function userAgent($ua){ $iphone = strstr(strtolower($ua), 'mobile'); //Search for 'mobile' in user-agent (iPhone have that) $android = strstr(strtolower($ua), 'android'); //Search for 'android' in user-agent $windowsPhone = strstr(strtolower($ua), 'phone'); //Search for 'phone' in user-agent (Windows Phone uses that) function androidTablet($ua){ //Find out if it is a tablet if(strstr(strtolower($ua), 'android') ){//Search for android in user-agent if(!strstr(strtolower($ua), 'mobile')){ //If there is no ''mobile' in user-agent (Android have that on their phones, but not tablets) return true; } } } $androidTablet = androidTablet($ua); //Do androidTablet function $ipad = strstr(strtolower($ua), 'ipad'); //Search for iPad in user-agent $kindle = strstr(strtolower($ua), 'kindle'); //Search for iPad in user-agent if($androidTablet || $ipad || $kindle){ //If it's a tablet (iPad / Android / Kindly) return 'tablet'; } elseif($iphone || $android || $windowsPhone){ //If it's a phone and NOT a tablet return 'mobile'; } else{ //If it's not a mobile device return 'desktop'; } } //**************************************************************** //**************************************************************** zip all jpeg file //**************************************************************** /* creates a compressed zip file */ function create_zip($files = array(),$destination = '',$overwrite = false) { //if the zip file already exists and overwrite is false, return false if(file_exists($destination) && !$overwrite) { return false; } //vars $valid_files = array(); //if files were passed in... if(is_array($files)) { //cycle through each file foreach($files as $file) { //make sure the file exists if(file_exists($file)) { $valid_files[] = $file; } } } //if we have good files... if(count($valid_files)) { //create the archive $zip = new ZipArchive(); if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) { return false; } //add the files foreach($valid_files as $file) { $zip->addFile($file,$file); } //debug //echo 'The zip archive contains ',$zip->numFiles,' files with a status of ',$zip->status; //close the zip -- done! $zip->close(); //check to make sure the file exists return file_exists($destination); } else { return false; } } // set 0 infront of number function strPad($zero, $value){ return str_pad($value, $zero, '0', STR_PAD_LEFT) ; } function emailVerifcationCode($mysqli, $system_user, $company, $from, $arruser, $rand){ $fullname = dataFilter($arruser['user_fullname']); $user_id = $arruser['user_id']; if ($rand != '' && strlen($rand) == 6){ // query for user $mysqli_user = $mysqli->query("SELECT * FROM system_user WHERE (user_permission = 'admin' || user_id = '".$user_id."') AND user_trash = '0'") ; if ($mysqli_user->num_rows > 0){ // loop all user while ($row_user = $mysqli_user->fetch_array(MYSQLI_ASSOC)){ // email to owner | sbs admin $to = dataFilter($row_user['user_email']) ; $title = SYSTEM . ' verification code for ' . $fullname ; // show content $body = 'Verification code for ' . $fullname . ' is ' . $rand ; //put your email address here $header = 'From: '.$company.' <'.$from.'>'.PHP_EOL. 'MIME-Version: 1.0'.PHP_EOL. 'Content-type: text/html; charset=utf-8'.PHP_EOL. 'Content-Transfer-Encoding: 8bit'.PHP_EOL. 'X-Mailer: PHP/'.PHP_VERSION.PHP_EOL ; // send to owner mail($to, $title, $body, $header); // send to user } } } return $boolean ; } // continue array with text with comma function continueTextWithComma($array){ $wording = '' ; if (count($array) > 0 && is_array($array)){ foreach($array as $key => $value){ $wording .= ($key == 0 ? '' : ', ') . $value ; } } return $wording ; } // check is numberic function checkNumberic($value){ $value = ($value > 0 ? $value : 0) ; return $value ; } // check if zero value function checkZeroValue($value){ return ($value > 0 ? $value : 0) ; } // json_encode array function jsonEncodeDecode($type, $array){ if ($type == 'encode'){ return json_encode($array) ; }else{ return json_decode($array, true) ; } } // add array with set max array function arrayInsertMax($array, $insert, $max){ array_unshift($array, $insert) ; array_splice($array, $max) ; return $array ; } // list all country in array function allCountry($type, $selected){ $content = '' ; $countries = array("AFGHANISTAN", "ALBANIA", "ALGERIA", "AMERICAN SAMOA", "ANDORRA", "ANGOLA", "ANGUILLA", "ANTARCTICA", "ANTIGUA AND BARBUDA", "ARGENTINA", "ARMENIA", "ARUBA", "AUSTRALIA", "AUSTRIA", "AZERBAIJAN", "BAHAMAS", "BAHRAIN", "BANGLADESH", "BARBADOS", "BELARUS", "BELGIUM", "BELIZE", "BENIN", "BERMUDA", "BHUTAN", "BOLIVIA", "BOSNIA AND HERZEGOWINA", "BOTSWANA", "BOUVET ISLAND", "BRAZIL", "BRITISH INDIAN OCEAN TERRITORY", "BRUNEI DARUSSALAM", "BULGARIA", "BURKINA FASO", "BURUNDI", "CAMBODIA", "CAMEROON", "CANADA", "CAPE VERDE", "CAYMAN ISLANDS", "CENTRAL AFRICAN REPUBLIC", "CHAD", "CHILE", "CHINA", "CHRISTMAS ISLAND", "COCOS (KEELING) ISLANDS", "COLOMBIA", "COMOROS", "CONGO", "CONGO, THE DEMOCRATIC REPUBLIC OF THE", "COOK ISLANDS", "COSTA RICA", "COTE D'IVOIRE", "CROATIA (HRVATSKA)", "CUBA", "CYPRUS", "CZECH REPUBLIC", "DENMARK", "DJIBOUTI", "DOMINICA", "DOMINICAN REPUBLIC", "EAST TIMOR", "ECUADOR", "EGYPT", "EL SALVADOR", "EQUATORIAL GUINEA", "ERITREA", "ESTONIA", "ETHIOPIA", "FALKLAND ISLANDS (MALVINAS)", "FAROE ISLANDS", "FIJI", "FINLAND", "FRANCE", "FRANCE METROPOLITAN", "FRENCH GUIANA", "FRENCH POLYNESIA", "FRENCH SOUTHERN TERRITORIES", "GABON", "GAMBIA", "GEORGIA", "GERMANY", "GHANA", "GIBRALTAR", "GREECE", "GREENLAND", "GRENADA", "GUADELOUPE", "GUAM", "GUATEMALA", "GUINEA", "GUINEA-BISSAU", "GUYANA", "HAITI", "HEARD AND MC DONALD ISLANDS", "HOLY SEE (VATICAN CITY STATE)", "HONDURAS", "HONG KONG", "HUNGARY", "ICELAND", "INDIA", "INDONESIA", "IRAN (ISLAMIC REPUBLIC OF)", "IRAQ", "IRELAND", "ISRAEL", "ITALY", "JAMAICA", "JAPAN", "JORDAN", "KAZAKHSTAN", "KENYA", "KIRIBATI", "KOREA, DEMOCRATIC PEOPLE'S REPUBLIC OF", "KOREA, REPUBLIC OF", "KUWAIT", "KYRGYZSTAN", "LAO, PEOPLE'S DEMOCRATIC REPUBLIC", "LATVIA", "LEBANON", "LESOTHO", "LIBERIA", "LIBYAN ARAB JAMAHIRIYA", "LIECHTENSTEIN", "LITHUANIA", "LUXEMBOURG", "MACAU", "MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF", "MADAGASCAR", "MALAWI", "MALAYSIA", "MALDIVES", "MALI", "MALTA", "MARSHALL ISLANDS", "MARTINIQUE", "MAURITANIA", "MAURITIUS", "MAYOTTE", "MEXICO", "MICRONESIA, FEDERATED STATES OF", "MOLDOVA, REPUBLIC OF", "MONACO", "MONGOLIA", "MONTSERRAT", "MOROCCO", "MOZAMBIQUE", "MYANMAR", "NAMIBIA", "NAURU", "NEPAL", "NETHERLANDS", "NETHERLANDS ANTILLES", "NEW CALEDONIA", "NEW ZEALAND", "NICARAGUA", "NIGER", "NIGERIA", "NIUE", "NORFOLK ISLAND", "NORTHERN MARIANA ISLANDS", "NORWAY", "OMAN", "PAKISTAN", "PALAU", "PANAMA", "PAPUA NEW GUINEA", "PARAGUAY", "PERU", "PHILIPPINES", "PITCAIRN", "POLAND", "PORTUGAL", "PUERTO RICO", "QATAR", "REUNION", "ROMANIA", "RUSSIAN FEDERATION", "RWANDA", "SAINT KITTS AND NEVIS", "SAINT LUCIA", "SAINT VINCENT AND THE GRENADINES", "SAMOA", "SAN MARINO", "SAO TOME AND PRINCIPE", "SAUDI ARABIA", "SENEGAL", "SEYCHELLES", "SIERRA LEONE", "SINGAPORE", "SLOVAKIA (SLOVAK REPUBLIC)", "SLOVENIA", "SOLOMON ISLANDS", "SOMALIA", "SOUTH AFRICA", "SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS", "SPAIN", "SRI LANKA", "ST. HELENA", "ST. PIERRE AND MIQUELON", "SUDAN", "SURINAME", "SVALBARD AND JAN MAYEN ISLANDS", "SWAZILAND", "SWEDEN", "SWITZERLAND", "SYRIAN ARAB REPUBLIC", "TAIWAN, PROVINCE OF CHINA", "TAJIKISTAN", "TANZANIA, UNITED REPUBLIC OF", "THAILAND", "TOGO", "TOKELAU", "TONGA", "TRINIDAD AND TOBAGO", "TUNISIA", "TURKEY", "TURKMENISTAN", "TURKS AND CAICOS ISLANDS", "TUVALU", "UGANDA", "UKRAINE", "UNITED ARAB EMIRATES", "UNITED KINGDOM", "UNITED STATES", "UNITED STATES MINOR OUTLYING ISLANDS", "URUGUAY", "UZBEKISTAN", "VANUATU", "VENEZUELA", "VIETNAM", "VIRGIN ISLANDS (BRITISH)", "VIRGIN ISLANDS (U.S.)", "WALLIS AND FUTUNA ISLANDS", "WESTERN SAHARA", "YEMEN", "YUGOSLAVIA", "ZAMBIA", "ZIMBABWE"); switch($type){ case 'select' : $content = ' ' ; break ; } $array['content'] = $content ; return $array ; } // check company or customer exists else insert function checkCompanyCustomer($array_company){ global $mysqli, $prefixCompany, $prefixCustomer ; $array = array() ; $customer_type = 'customer' ; // reset value $company = $array_company['company_name'] ; $customer = $array_company['customer_name'] ; // check company if exists else insert $returnCompanyID = getCompanyByName($company) ; if ($returnCompanyID['result']){ $company_id = $returnCompanyID['company_id'] ; }else{ // insert into company table $mysqli->query("INSERT INTO $prefixCompany (company_name, company_website, company_gst, company_number, company_code, company_type, company_date, company_trash) VALUES ('".$company."', '".$array_company['company_website']."', '".$array_company['company_gst']."', '".$array_company['company_number']."', '".$array_company['company_code']."', '".$array_company['company_type']."', '".TODAYDATE."', '0')") ; // get last id for company $company_id = $mysqli->insert_id ; } $returnCustomerID = getCustomerByName($customer_type, $company_id, $customer) ; if ($returnCustomerID['result']){ $customer_id = $returnCustomerID['customer_id'] ; $mysqli->query("UPDATE $prefixCustomer SET customer_account_code = '".$array_company['customer_account_code']."', customer_country = '".$array_company['customer_country']."', customer_state = '".$array_company['customer_state']."', customer_area = '".$array_company['customer_area']."', customer_address1 = '".$array_company['customer_address1']."', customer_address2 = '".$array_company['customer_address2']."', customer_address3 = '".$array_company['customer_address3']."', customer_call = '".$array_company['customer_call']."', customer_name = '".$customer."', customer_email1 = '".$array_company['customer_email1']."', customer_email2 = '".$array_company['customer_email2']."', customer_email3 = '".$array_company['customer_email3']."', customer_mobile = '".$array_company['customer_mobile']."', customer_office = '".$array_company['customer_office']."', customer_fax = '".$array_company['customer_fax']."', customer_modified = '".TODAYDATE."' WHERE customer_id = '".$customer_id."'") ; }else{ // insert into company table $mysqli->query("INSERT INTO $prefixCustomer (customer_type, customer_company_id, customer_account_code, customer_call, customer_name, customer_country, customer_state, customer_area, customer_address1, customer_address2, customer_address3, customer_email1, customer_email2, customer_email3, customer_mobile, customer_office, customer_fax, customer_live, customer_date, customer_modified, customer_trash) VALUES ('".$customer_type."', '".$company_id."', '".$array_company['customer_account_code']."', '".$array_company['customer_call']."', '".$customer."', '".$array_company['customer_country']."', '".$array_company['customer_state']."', '".$array_company['customer_area']."', '".$array_company['customer_address1']."', '".$array_company['customer_address2']."', '".$array_company['customer_address3']."', '".$array_company['customer_email1']."', '".$array_company['customer_email2']."', '".$array_company['customer_email3']."', '".$array_company['customer_mobile']."', '".$array_company['customer_office']."', '".$array_company['customer_fax']."', 'active', '".TODAYDATE."', '".TODAYDATE."', '0')") ; // get last id for company $customer_id = $mysqli->insert_id ; } $array['company_id'] = $company_id ; $array['customer_id'] = $customer_id ; return $array ; } // get all company list only function getAllCompanyOnly($search_query){ global $mysqli, $prefixCompany ; $result = false ; $array_company = array() ; // query for company $mysqli_company = $mysqli->query("SELECT company_id, company_name FROM $prefixCompany WHERE company_name != '' AND company_trash = '0' ".$search_query." ORDER BY (company_name+0) ASC") ; if ($mysqli_company->num_rows > 0){ // loop all company while ($row_company = $mysqli_company->fetch_array(MYSQLI_ASSOC)){ $array_company[] = $row_company ; } $result = true ; } $array['result'] = $result ; $array['content'] = $array_company ; return $array ; } // get all company list function getAllCompany($search_query, $selected_id, $page_title){ global $mysqli, $prefixCompany, $prefixCustomer ; $select = '' ; $result = false ; // query for company $mysqli_company = $mysqli->query("SELECT company_id, company_name FROM $prefixCompany a LEFT JOIN $prefixCustomer b ON (a.company_id = b.customer_company_id) WHERE a.company_name != '' AND a.company_trash = '0' AND b.customer_live = 'active' AND b.customer_trash = '0' ".$search_query." GROUP BY a.company_name ORDER BY a.company_name ASC") ; if ($mysqli_company->num_rows > 0){ $select .= ' ' ; $result = true ; } $array['result'] = $result ; $array['select'] = $select ; return $array ; } // get selected company by name function getCompanyByName($company_name){ global $mysqli, $prefixCompany ; $result = false ; $array = array() ; $mysqli_company = $mysqli->query( "SELECT company_id FROM $prefixCompany WHERE company_trash = '0' AND company_name = '".$company_name."' LIMIT 1" ) ; if ($mysqli_company->num_rows > 0){ $row_company = $mysqli_company->fetch_array(MYSQLI_ASSOC) ; $array = $row_company ; $result = true ; } $array['result'] = $result ; return $array ; } // get selected customer by name function getCustomerByName($customer_type, $company_id, $customer_name){ global $mysqli, $prefixCompany, $prefixCustomer ; $result = false ; $array = array() ; $mysqli_customer = $mysqli->query("SELECT customer_id FROM $prefixCustomer WHERE customer_type = '".$customer_type."' AND customer_company_id = '".$company_id."' AND customer_name = '".$customer_name."' AND customer_trash = '0' LIMIT 1") ; if ($mysqli_customer->num_rows > 0){ $row_customer = $mysqli_customer->fetch_array(MYSQLI_ASSOC) ; $array = $row_customer ; $result = true ; } $array['result'] = $result ; return $array ; } // get all company list function getAllCustomer($search_query, $selected_company_id, $selected_customer_id){ global $mysqli, $prefixCompany, $prefixCustomer ; $select = '' ; $result = false ; // query for company $mysqli_company = $mysqli->query("SELECT company_id, company_name FROM $prefixCompany a LEFT JOIN $prefixCustomer b ON (a.company_id = b.customer_company_id) WHERE a.company_name != '' AND a.company_trash = '0' AND b.customer_live = 'active' AND b.customer_trash = '0' ".$search_query." GROUP BY a.company_name ORDER BY a.company_name ASC") ; if ($mysqli_company->num_rows > 0){ $select .= ' ' ; $result = true ; } $array['result'] = $result ; $array['select'] = $select ; return $array ; } // return customer value function getCustomer($type, $select_customer_id, $select_company_id, $select_customer_type){ global $mysqli, $prefixCustomer, $prefixCompany ; $result = false ; // check query if exsits if ($type == 'trash'){ }else{ $query = " AND a.customer_type = '".$type."'" ; if ($type != 'supplier'){ $query = " AND a.customer_company_id = '".$select_company_id."'" ; } } $mysqli_query = "SELECT * FROM $prefixCustomer a LEFT JOIN $prefixCompany b ON (a.customer_company_id = b.company_id) WHERE a.customer_id = '".$select_customer_id."' AND a.customer_live = 'active' AND a.customer_trash = '0' AND b.company_trash = '0'".$query ; $mysqli_customer = $mysqli->query($mysqli_query." LIMIT 1") ; if ($mysqli_customer->num_rows > 0){ $row_customer = $mysqli_customer->fetch_array(MYSQLI_ASSOC) ; $array['content'] = $row_customer ; $result = true ; } $array['result'] = $result ; return $array ; } // return selected customer value with company id provide function getSelectedCustomerOption($selected_page, $select_customer_id, $select_company_id, $boolean_marketing, $user_id){ global $mysqli, $prefixCustomer, $prefixCompany ; // check selected page $search_query = $customer = '' ; if ($selected_page != ''){ // check user page switch($selected_page){ case 'marketing' : // check permission $search_query .= " AND customer_type = 'customer'" ; break ; case 'purchasing' : $search_query .= " AND customer_type = 'supplier'" ; break ; } } // query for customer $mysqli_customer = $mysqli->query("SELECT * FROM $prefixCustomer WHERE customer_company_id = '".$select_company_id."' AND customer_live = 'active' AND customer_trash = '0' ".$search_query." ORDER BY customer_name ASC") ; $customer = '' ; if ($mysqli_customer->num_rows > 0){ // loop all customer while($row_customer = $mysqli_customer->fetch_array(MYSQLI_ASSOC)){ // check if customer not null $customer_name = dataFilter($row_customer['customer_name']) ; $customer_name = ($customer_name != '' ? $customer_name : 'NoName') ; $customer_account_code = dataFilter($row_customer['customer_account_code']) ; $customer_account_code = ($customer_account_code != '' ? $customer_account_code : 'No Account Code') ; if ($customer_name != '' || $customer_account_code != ''){ $customer .= ' ' ; } } } return $customer ; } // return company letter head function getOwnerCompanyLetterHead($comp_id = ''){ global $mysqli ; if ($comp_id != '') { $search_pquery="AND branch_id ='".$comp_id."'"; } $array = [ 'name' => '', 'header' => '' ] ; $mysqli_page = $mysqli->query("SELECT branch_name, branch_content FROM branch WHERE deleted_at IS NULL ".$search_pquery." LIMIT 1") ; if ($mysqli_page->num_rows > 0){ $row_page = $mysqli_page->fetch_assoc() ; $content = entityDecode(dataFilter($row_page['branch_content'])) ; $array['name'] = $row_page['branch_name'] ; $array['header'] = $content ; } return $array ; } // export file function exportFileExcel($records) { $heading = false ; if(!empty($records)) foreach($records as $row) { if(!$heading) { // display field/column names as a first row echo implode("\t", array_keys($row)) . "\n" ; $heading = true; } echo implode("\t", array_values($row)) . "\n" ; } exit; } // get user list function getUser($type, $select_name, $selected_id, $required, $search_query){ global $mysqli ; $result = false ; $boolean_exsits = false ; $select_box = '' ; $array_list = array() ; // loop all user if ( $type != 'all-marketing' ){ $search_query = " AND user_trash = '0'" . $search_query ; } $mysqli_page = $mysqli->query("SELECT user_id, user_name, user_colour FROM system_user WHERE user_id != '' ".$search_query) ; if ($mysqli_page->num_rows > 0){ $result = true ; while ($row_page = $mysqli_page->fetch_array(MYSQLI_ASSOC)){ $id = $row_page['user_id'] ; $username = ucwords(dataFilter($row_page['user_name'])) ; $colour = dataFilter($row_page['user_colour']) ; $select_box .= ' ' ; $array_list[] = array('id' => $id, 'name' => $username, 'user_name' => $username, 'colour' => $colour) ; if ($selected_id == $id){ $boolean_exsits = true ; $array_selected_list = array('id' => $id, 'name' => $username, 'user_name' => $username, 'colour' => $colour) ; } } } $select_box = ' ' ; $array['select_box'] = $select_box ; $array['exists'] = $boolean_exsits ; $array['list'] = $array_list ; $array['selected_list'] = $array_selected_list ; $array['result'] = $result ; return $array ; } // branch function getBranch($type, $select_name, $selected_id, $required, $search_query){ global $mysqli ; $result = false ; $select_box = '' ; $array_list = array() ; $array_selected_list = array() ; $boolean_branch_exsits = false ; // show hq and branch $array_branch_list = array('branch-hq', 'branch') ; foreach($array_branch_list as $key => $value){ // loop hq switch($value){ case 'branch-hq' : $search_query_reset = " LIMIT 1" ; break ; case 'branch' : $search_query_reset = " AND post_title != ''" . $search_query ; break ; } // check branch query $mysqli_page = $mysqli->query("SELECT * FROM system_post WHERE post_type = '".$value."' AND post_categories = '".$value."' AND post_trash = '0'" . $search_query_reset) ; if ($mysqli_page->num_rows > 0){ $result = true ; while ($row_page = $mysqli_page->fetch_array(MYSQLI_ASSOC)){ $id = $row_page['post_id'] ; $select_box .= ' ' ; $array_list[] = array('id' => $id, 'type' => $value, 'title' => dataFilter($row_page['post_title'])) ; if ($selected_id == $id){ $boolean_branch_exsits = true ; $array_selected_list = array('id' => $id, 'type' => $value, 'title' => dataFilter($row_page['post_title'])) ; } } } } $select_box = ' ' ; $array['select_box'] = $select_box ; $array['list'] = $array_list ; $array['selected_list'] = $array_selected_list ; $array['exists'] = $boolean_branch_exsits ; $array['result'] = $result ; return $array ; } // return selected product status function selectedProductStatus($id){ global $mysqli ; $result = false ; if ($id != ''){ $mysqli_product = $mysqli->query("SELECT post_id, post_type, post_title, post_content, post_product, post_quantity_available, post_quantity_minimum, post_price, post_price_selling, post_supplier_id FROM system_post WHERE post_id = '".$id."' AND post_trash = '0' LIMIT 1") ; if ($mysqli_product->num_rows > 0){ $row_product = $mysqli_product->fetch_array(MYSQLI_ASSOC) ; $array = $row_product ; $result = true ; } } $array['result'] = $result ; return $array ; } // get user list function getPostType($type, $select_name, $selected_id, $required, $search_query){ global $mysqli ; $result = false ; $boolean_exsits = false ; $select_box = '' ; $array_list = $array_select_list = array() ; // check type first switch($type){ case 'area-title' : $post_type = 'area' ; break ; default : $post_type = $type ; } // loop all user $mysqli_page = $mysqli->query("SELECT * FROM system_post WHERE post_type = '".$post_type."' AND post_trash = '0'".$search_query) ; if ($mysqli_page->num_rows > 0){ $result = true ; while ($row_page = $mysqli_page->fetch_array(MYSQLI_ASSOC)){ $title = dataFilter($row_page['post_title']) ; $id = $row_page['post_id'] ; switch($type){ case 'area' : $select_box .= '' ; break ; default : $select_box .= '' ; $array_list[] = array('id' => $id, 'name' => $title) ; if ($selected_id == $id){ $boolean_exsits = true ; $array_select_list = array('id' => $id, 'name' => $title) ; } break ; } } } switch($type){ case 'area' : $select_box = '
' ; break ; default : $select_box = '' ; } $array['select_box'] = $select_box ; $array['exists'] = $boolean_exsits ; $array['list'] = $array_list ; $array['select_list'] = $array_select_list ; $array['result'] = $result ; return $array ; } // reset company insert function function resetCompanyDetails($array_company){ // reset key $array_remove = array('company_id', 'company_date', 'company_trash', 'customer_id', 'customer_type', 'customer_company_id', 'customer_user_id', 'customer_remark', 'customer_date', 'customer_modified', 'customer_trash') ; foreach($array_remove as $value){ unset($array_company[$value]) ; } $array_company = resetStringArray($array_company) ; array_values($array_company) ; return $array_company ; } // reset string array function resetStringArray($array){ foreach ( $array as $key => $value ){ $array[$key] = resetString(dataFilter($value)) ; } return $array ; } // reset date format function resetDateFormat($date){ if($date != NULL){ return ( $date == '0000-00-00' || $date == '0000-00-00 00:00:00' ? '-' : date('d . m . Y', strtotime($date)) ) ; }else{ return "-"; } } // reset date format function resetDateFormat2($date){ return ( $date == '0000-00-00' || $date == '0000-00-00 00:00:00' ? '-' : date('d . m . Y', strtotime($date)) ) ; } // reset date format function resetDateTimeFormat($date){ return ( $date != '0000-00-00 00:00:00' ? date('d . m . Y ( ha : i\m : s\s )', strtotime($date)) : '-' ) ; } // reset date format function resetTimeFormat($date){ $value = '' ; switch ( $date ){ case '0000-00-00 00:00:00' : case '00:00:00' : $value = '' ; break ; default : $value = date('H:iA', strtotime($date)) ; } return $value ; } function resetTimeWithoutSec( $value ){ $value = ( $value != '00:00:00' ? date('H:i', strtotime($value)) : '' ) ; $value = ( $value != '00:00' ? $value : '' ) ; return $value ; } // encode value function encodeValue($value){ $value = base64_encode('system_'.$value.'123') ; return md5($value) ; } function getRounding($amount){ $priceRounding = priceRounding($amount); $Rounding = $priceRounding - $amount; return $Rounding; } // price rounding function priceRounding($amount = 0){ // set amount to 2 decimal // $amount = numberFormat($amount) ; // check if decimal exists if (is_float($amount) && strpos($amount, '.') !== false){ $amount = substr_replace($amount, '', strpos($amount, '.') + 3) ; }else{ $amount = $amount.'.00' ; } // reset amount to 2 decimal $amount = numberFormat($amount) ; $gst_rounding = substr($amount, -2) ; // statement for rounding if ($gst_rounding < 1){ $amount = substr_replace($amount, 00, -2) ; }elseif ($gst_rounding <= 10){ $amount = substr_replace($amount, 10, -2) ; }elseif ($gst_rounding <= 20){ $amount = substr_replace($amount, 20, -2) ; }elseif ($gst_rounding <= 30){ $amount = substr_replace($amount, 30, -2) ; }elseif ($gst_rounding <= 40){ $amount = substr_replace($amount, 40, -2) ; }elseif ($gst_rounding <= 50){ $amount = substr_replace($amount, 50, -2) ; }elseif ($gst_rounding <= 60){ $amount = substr_replace($amount, 60, -2) ; }elseif ($gst_rounding <= 70){ $amount = substr_replace($amount, 70, -2) ; }elseif ($gst_rounding <= 80){ $amount = substr_replace($amount, 80, -2) ; }elseif ($gst_rounding <= 90){ $amount = substr_replace($amount, 90, -2) ; }elseif ($gst_rounding <= 99){ $amount = substr_replace($amount, 00, -2) ; $amount += 1 ; } // set again amount to 2 decimal $amount = numberFormat($amount) ; // return result return $amount ; } // multiple array insert function multipleArrayTo($array){ $temp = array() ; if ( arrayCheck($array) ){ foreach ( $array as $value ){ $temp[] = '('.$value.')' ; } } return implode(',', $temp) ; } // check page permission function permissionCheck($row_user, $page){ $page = '('.$page.')' ; $result = false ; if ( $page == '(all-can-access)' ){ $result = true ; }else{ if ( $row_user['user_permission'] == 'admin' || strpos($row_user['user_permission2'], $page) !== false ) { $result = true ; } } return $result ; } // check page permission function permissionWebsite($row_page_website, $page){ $page = '('.$page.')' ; if ( strpos($row_page_website['post_content'], $page) !== false ) { $result = true ; } return $result ; } function passwordEncrypt($psw){ return md5('1QWE#!'.$psw.'2QW#wew') ; } function getConfig($attr){ global $mysqli, $prefixConfig ; $config_value = '' ; $get_config = $mysqli->query("SELECT config_value FROM $prefixConfig WHERE config_attribute = '".$attr."' LIMIT 1") ; if ( $get_config->num_rows > 0 ){ $row_config = $get_config->fetch_assoc() ; $config_value = $row_config['config_value'] ; } return $config_value ; } // function change columns name function changeColumnsName($pass_value){ $array_col = array( 'col-xs-14' => 'twelve', 'col-xs-13' => 'twelve', 'col-xs-12' => 'twelve', 'col-xs-11' => 'eleven', 'col-xs-10' => 'ten', 'col-xs-9' => 'nine', 'col-xs-8' => 'eight', 'col-xs-7' => 'seven', 'col-xs-6' => 'six', 'col-xs-5' => 'five', 'col-xs-4' => 'four', 'col-xs-3' => 'three', 'col-xs-2' => 'two', 'col-xs-1' => 'one') ; foreach($array_col as $key => $value){ $pass_value = str_replace($key, $value . ' columns', $pass_value) ; } ///$pass_value = str_replace('contenteditable="true" tabindex="0"', '', $pass_value) ; $pass_value = preg_replace("/(spellcheck=\"(\w*)\"|role=\"(\w*\W*\d*\D*\s*\S*)\"|aria-label=\"(\w*\W*\d*\D*\s*\S*)\"|aria-describedby=\"(cke_(\d+))\"|contenteditable=\"(\w+\W*\d*\D\s*\S*)\"|tabindex=\"(\w+\W*\d*\D\s*\S*)\")/", "", $pass_value); //preg_replace("/title=\"(.*editor(\d+))\"/", "", $input_lines); //$pass_value = preg_replace("/Rich.*editor\d+/", "", $pass_value); $pass_value = preg_replace("/Rich Text Editor, editor(\d+)/", "", $pass_value); return $pass_value ; } function pushToBranchUser( $branchs, $staffs, $type, $type_id, $title, $message ){ global $mysqli ; $search_query = '' ; if ( arrayCheck($branchs) ){ $search_query .= " AND branch_id IN ( ".implode(', ', $branchs)." )" ; } if ( arrayCheck($staffs) ){ $search_query .= " AND staff_id IN ( ".implode(', ', $staffs)." )" ; } $select_staffs = $mysqli->query( "SELECT staff_id FROM staff WHERE deleted_at IS NULL AND ( staff_date_resigned IS NULL || staff_date_resigned = '0000-00-00' || staff_date_resigned >= '".TODAYDATE."' ) " . $search_query ) ; if ( $select_staffs->num_rows > 0 ){ $array_staffs = [] ; while ( $staff = $select_staffs->fetch_assoc() ){ $array_staffs[] = $staff['staff_id'] ; } foreach ( $array_staffs as $k => $v ){ pushToUserCron( $type, $type_id, $v, $title, $message ) ; } } } function pushToUserCron( $type, $type_id, $staff_id, $title, $message, $inbox_id = '' ){ global $mysqli ; $mysqli->query( "INSERT INTO staff_notification_cron ( type, type_id, staff_id, title, message, inbox_id, is_sent ) VALUES ( '".$type."', '".$type_id."', '".$staff_id."', '".$title."', '".$message."', '".$inbox_id."', 'no' )" ) ; } function pushToUser( $type, $type_id, $staff_id, $title, $message, $cron_id = '', $inbox_id = '' ){ /* global $mysqli ; $push = array() ; $notifications_query = $mysqli->query( "SELECT notificationid, notification, badge FROM staff_notification WHERE deleted_at IS NULL AND staff_id = '".$staff_id."' ORDER BY notificationid DESC LIMIT 1") ; if ( $notifications_query->num_rows > 0 ){ $notification = $notifications_query->fetch_assoc() ; $token_id = $notification['notificationid'] ; $badge = ( $notification['badge'] + 1 ) ; $is_create = true ; if ( $inbox_id != '' && $inbox_id > 0 ){ $is_create = false ; } if ( $is_create ){ $mysqli->query( "INSERT INTO inbox ( staff_id, from_table, from_id, receiver_type, view_format, title, description, created_at ) VALUES ( '/".$staff_id."/', '".$type."', '".$type_id."', '3', 'message', '".$title."', '".$message."', '".TODAYDATE."' )" ) ; $inbox_id = $mysqli->insert_id ; $mysqli->query( "INSERT INTO staff_inbox_view ( inbox_id, staff_id, is_read ) VALUES ( '".$inbox_id."', '".$staff_id."', '0' )" ) ; $mysqli->query( "UPDATE staff_notification_cron SET inbox_id = '".$inbox_id."' WHERE cron_id = '".$cron_id."'" ) ; } $data = array( "to" => $notification['notification'], "notification" => array( "id" => $notification['notificationid'], "title" => dataFilter( $title ), "body" => dataFilter( $message ), "icon" => PATH.'images/logo.png', "sound" => 'default', "vibrate" => '1', "badge" => $badge, "click_action" => '', "show_in_foreground" => 'true' ) ) ; pushNotification( $data ) ; // update badge $mysqli->query("UPDATE staff_notification SET badge = '".$badge."' WHERE notificationid = '".$token_id."'") ; } */ } function pushNotification( $data ){ /* $credentialsPath = 'hr-system-b0af6-firebase-adminsdk-u5wel-5bcb3596d4.json' ; // Replace with your actual path $projectId = '517510861795' ; // Your Firebase project ID or project number function getAccessToken($credentialsPath) { $scopes = ['https://www.googleapis.com/auth/firebase.messaging']; // Get OAuth2 token using service account credentials $credentials = json_decode(file_get_contents($credentialsPath), true); $client = new Google_Client(); $client->setAuthConfig($credentials); $client->setScopes($scopes); // Get the token $accessToken = $client->fetchAccessTokenWithAssertion()['access_token']; return $accessToken; } $headers = array( 'Authorization: key='.PUSHTOKEN, 'Content-Type: application/json' ) ; $ch = curl_init() ; curl_setopt( $ch,CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send' ) ; curl_setopt( $ch,CURLOPT_POST, true ) ; curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers ) ; curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true ) ; curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode($data)) ; $result = curl_exec($ch) ; $output = jsonEncodeDecode('decode', $result) ; print_r($result) ; saveLog( 'notification', 'Notification', $data, $output ) ; curl_close ($ch) ; */ } function setTotalHoursArray( $array, $value ){ if ( $value != '' ){ $value = explode( ':', $value ) ; $array[] = $value ; } return $array ; } function setTotalHoursSum( $array ){ $value = '00:00' ; if ( count($array) > 0 ){ $hours = 0 ; $minutes = 0 ; foreach ( $array as $kk => $vv ){ $hours += $vv['0'] ; $minutes += $vv['1'] ; } $check = true ; while ( $check ){ if ( $minutes >= 60 ){ $minutes -= 60 ; $hours++ ; }else{ $check = false ; } } $value = strPad(2, $hours).':'.strPad(2, $minutes) ; } return $value ; } function cronjobHit($urlParameter){ $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch,CURLOPT_URL,$urlParameter); curl_setopt($ch, CURLOPT_FRESH_CONNECT, true); curl_setopt($ch, CURLOPT_TIMEOUT, 1); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.A.B.C Safari/525.13"); $output = curl_exec($ch); curl_close($ch); return json_decode($output, true) ; } function callWithoutResponse( $host, $port, $method, $path, $params = [], $connectTimeout = 1 ){ $status = '2' ; $message = '' ; $host = str_replace( [ 'https://', 'www.' ], '', $host ) ; $host = str_replace( '/', '', $host ) ; $server = $host ; $params = http_build_query($params) ; if ( $port == '443' ){ $server = 'ssl://'.$server ; } $fp = fsockopen( $server, $port, $errorCode, $errorInfo, $connectTimeout ) ; if ( !$fp ) { $message = $errorInfo . ' ( '.$errorCode.' )' ; } else { if ( $method == 'POST' ){ $http .= "$method $path HTTP/1.1\r\n" ; $http .= "Host: $host\r\n" ; $http .= "Content-type: application/x-www-form-urlencoded\r\n" ; $http .= "Content-length: ".strlen($params)."\r\n" ; $http .= "Connection: close\r\n\r\n" ; $http .= $params."\r\n\r\n" ; }else{ $http .= "$method $path?".$params." HTTP/1.1\r\n" ; $http .= "Host: $host\r\n" ; $http .= "Connection: close\r\n\r\n" ; } if ( fputs( $fp, $http ) === false ){ $message = 'Request failed.' ; }else{ $status = '1' ; $message = 'Success' ; } fclose($fp) ; } return [ 'status' => $status, 'message' => $message ] ; } function getOTSalary( $staffOtRate, $staff_salary, $list_ot_day, $return = '' ){ $onehoursalary = numberFormat( ( $staff_salary * $staffOtRate / 8 ), 2 ) ; // base rate // $oneminutesalary = numberFormat( ( $onehoursalary / 60 ), 2 ) ; // base rate for minute // off day, public holiday, work day all ot rate is same $get_total = numberFormat( $list_ot_day*$onehoursalary ) ; // hour rate + minute rate if ( $return != '' ){ return [ 'perhour' => $onehoursalary, 'total' => $get_total ] ; }else{ return $get_total ; } } function calculateSalary( $row ){ $salary = $row['salary'] ; $salary_jtk = $row['salary_jtk'] ; $total_basic = numberFormat( $salary * $row['total_normal_days'] ) ; $get_ot = getOTSalary( $row['ot_rate'], $salary, $row['total_ot_hours'], 'yes' ) ; $total_ot = $get_ot['total'] ; $total_rest = numberFormat( numberFormat($salary_jtk * $row['day_rest_rate'], 2) * $row['total_rest_days'] ) ; $get_ot_rest = getOTSalary( $row['ot_rest_rate'], $salary_jtk, $row['total_ot_rest_hours'], 'yes' ) ; $total_ot_rest = $get_ot_rest['total'] ; $total_public = numberFormat( numberFormat($salary_jtk * $row['day_public_rate'], 2) * $row['total_public_days'] ) ; $get_ot_public = getOTSalary( $row['ot_public_rate'], $salary_jtk, $row['total_ot_public_hours'], 'yes' ) ; $total_ot_public = $get_ot_public['total'] ; // $total_public_nor = numberFormat( $salary_jtk * $row['total_public_working_days'] ) ; $total_public_nor = numberFormat( $salary_jtk * $row['total_public_working_days'] ) ; $total_annual = numberFormat( $salary_jtk * $row['total_annual_days'] ) ; $total_medical = numberFormat( $salary_jtk * $row['total_mc_days'] ) ; $total_allo_food = numberFormat( $row['allowance_food'] * $row['allowance_food_days'] ) ; $total_unpaid_leave = numberFormat( $salary_jtk * $row['total_unpaid_days'] ) ; // total allowance // claim or allowance description $allo = 0 ; $allo += $row['claim_medical'] ; $allo += $row['allowance_monthly_increment'] ; $allo += $row['allowance_monthly'] ; $allo += $row['allowance_topup'] ; $allo += $row['allowance_target'] ; $allo = numberFormat( $allo ) ; // sum total salary first $total_earn = ( $total_basic + $total_ot ) ; $total_earn += ( $total_rest + $total_ot_rest ) ; $total_earn += ( $total_public + $total_ot_public + $total_public_nor ) ; $total_earn += ( $total_annual ) ; $total_earn += ( $total_medical ) ; $total_earn += ( $total_allo_food + $allo ) ; $total_earn = numberFormat( $total_earn ) ; // total charge // charge $charge = 0 ; $charge += $row['charge_advance'] ; $charge += $row['charge_skhppa'] ; $charge += $row['charge_hostel'] ; $charge += $row['charge_gas'] ; $charge += $row['charge_absent'] ; $charge += $row['charge_absent_punch'] ; $charge += $row['charge_late'] ; $charge += $row['charge_time_off'] ; $charge += $row['charge_early_out'] ; $charge += $row['charge_give_away'] ; $charge += $row['charge_comment'] ; $charge += $row['charge_target'] ; $charge += $total_unpaid_leave ; $charge = numberFormat( $charge ) ; $total_salary = numberFormat( $total_earn - $charge ) ; return [ 'total_basic' => $total_basic, 'total_ot' => $total_ot, 'total_ot_hour' => $get_ot['perhour'], 'total_rest' => $total_rest, 'total_ot_rest' => $total_ot_rest, 'total_ot_rest_hour' => $get_ot_rest['perhour'], 'total_public' => $total_public, 'total_ot_public' => $total_ot_public, 'total_ot_public_hour' => $get_ot_public['perhour'], 'total_public_nor' => $total_public_nor, 'total_medical' => $total_medical, 'total_annual' => $total_annual, 'total_allo_food' => $total_allo_food, 'total_allowance' => $allo, 'total_earn' => $total_earn, 'total_charge' => $charge, 'total_unpaid_leave' => $total_unpaid_leave, 'total_salary' => $total_salary ] ; } function zeroToEmpty( $value ){ return ( $value > 0 ? $value : '' ) ; } function commonAddTime( $start, $end ){ // explode $end = strtotime($end) ; $hours = date('H', $end) ; $minutes = date('i', $end) ; $seconds = date('s', $end) ; $interval = 'PT'.$hours.'H'.$minutes.'M'.$seconds.'S' ; // P开头代表日期, T=时间, Y=Year...,Sample : P2Y4DT6H8M $start = new DateTime($start) ; $start = $start->add( new DateInterval($interval) ) ; $start = $start->format('H:i:s') ; return $start ; } function resetStatus( $value ){ switch ( $value ){ case 'inactive' : return 'Inactive' ; break ; case 'pending' : case 'awaiting-arrival' : case 'awaiting-collection' : return 'Pending' ; break ; case 'cancelled' : return 'Cancelled' ; break ; case 'active' : return 'Active' ; break ; case 'approved' : return 'Approved' ; break ; case 'confirmed' : return 'Confirmed' ; break ; case 'rated' : return 'Rated' ; break ; case 'rejected' : return 'Rejected' ; break ; } } function taskStatusButton( $status ){ switch ($status) { case 'visited': case 'completed': $status = ''; break; case 'tested': case 'progress': $status = ''; break; case 'tested-rejected' : case 'rejected': $status = ''; break; case 'tested-approved' : case 'approved': $status = ''; break; case 'pending': $status = ''; break; case 'assigned': $status = ''; break; default: $status = ''; break; } return $status; } function setDifficulty( $value ){ switch ( $value ) { case 'normal': $color = 'darkgreen'; break; case 'medium': $color = 'blueviolet'; break; case 'high': $color = 'blue'; break; case 'extremely': $color = 'orange'; break; case 'urgent': $color = 'red'; break; default: $color = 'black'; break; } return $color; } function resetTaskType( $task_type ){ switch($task_type){ case '1time': $task_type = 'One Time Only'; break; case 'daily': $task_type = 'Daily Update'; break; case 'weekly': $task_type = 'Weekly Update'; break; case 'monthly': $task_type = 'Monthly Update'; break; case 'yearly': $task_type = 'Yearly Update'; break; default: $task_type = '-'; break; } return $task_type; } function getDepartmentName( $department_id ){ global $mysqli; $mysqli_department = $mysqli->query("SELECT b.department_desc FROM setting_department a LEFT JOIN setting_department_translation b ON ( a.department_id = b.department_id ) WHERE a.deleted_at IS NULL AND b.lang = 'en' AND a.department_id = '".$department_id."'"); $row_department = $mysqli_department->fetch_assoc(); $department_name = $row_department['department_desc']; return $department_name; } function getStaffName( $staff_id ){ global $mysqli; $staff_name = '' ; $mysqli_staff = $mysqli->query("SELECT staff_name, staff_idno FROM staff WHERE staff_id = '".$staff_id."' LIMIT 1") ; if ( $mysqli_staff->num_rows > 0 ){ $row_staff = $mysqli_staff->fetch_assoc() ; $staff_name = dataFilter( $row_staff['staff_name'] ) . ' ('.$row_staff['staff_idno'].')' ; } return $staff_name; } function getStaffPoint( $staff_id ){ global $mysqli ; $select = $mysqli->query( "SELECT balance FROM staff_point_movement WHERE deleted_at IS NULL AND staff_id = '".$staff_id."' ORDER BY movement_id DESC LIMIT 1" ) ; $balance = 0 ; if ( $select->num_rows > 0 ){ $row = $select->fetch_assoc() ; $balance = $row['balance'] ; } return $balance ; } function pointMovement( $from_table, $from_id, $type, $difficulty, $staff_id, $amount, $remark ){ global $mysqli ; $result = false ; $select = $mysqli->query( "SELECT point_id, point_value FROM setting_point WHERE deleted_at IS NULL AND point_from = '".$from_table."' AND point_type = '".$type."' AND difficulty = '".$difficulty."' LIMIT 1" ) ; if ( $select->num_rows > 0 ){ $select_staff = $mysqli->query( "SELECT staff_point_achievement, staff_point FROM staff a WHERE a.deleted_at IS NULL AND a.staff_id = '".$staff_id."' AND ( a.staff_date_resigned >= '".date("Y-m-d",time())."' OR a.staff_date_resigned = '0000-00-00' OR a.staff_date_resigned IS NULL ) LIMIT 1" ) ; if ( $select_staff->num_rows > 0 ){ $staff = $select_staff->fetch_assoc() ; $row_select = $select->fetch_assoc() ; $reference_id = $row_select['point_id'] ; $amount = ( $row_select['point_value'] + $amount ) ; if ( $amount < 0 || $amount > 0 ){ // set staff point $select = $mysqli->query( "SELECT balance FROM staff_point_movement WHERE deleted_at IS NULL AND staff_id = '".$staff_id."' ORDER BY movement_id DESC LIMIT 1" ) ; $before = 0 ; if ( $select->num_rows > 0 ){ $row = $select->fetch_assoc() ; $before = $row['balance'] ; } // if ( $before == $staff['staff_point'] ){ $balance = ( $before + $amount ) ; $mysqli->query( "INSERT INTO staff_point_movement ( staff_id, reference_id, from_table, from_id, before_amount, amount, balance, remark ) VALUES ( '".$staff_id."', '".$reference_id."', '".$from_table."', '".$from_id."', '".$before."', '".$amount."', '".$balance."', '".$remark."' )" ) ; // set staff star $update_query = '' ; $staff_star = 0 ; $point_achievement = $staff['staff_point_achievement'] ; $list_allow_achievement = [ 'hr', 'task', 'adjustment' ] ; if ( in_array( $from_table, $list_allow_achievement ) ){ $point_achievement = ( $point_achievement + $amount ) ; $point_achievement2 = $point_achievement ; // check current start get $boolean_achievement = true ; if ( $point_achievement2 >= 50 ){ while ( $boolean_achievement ){ $staff_star += 0.5 ; $point_achievement2 -= 50 ; if ( $point_achievement2 < 50 ){ $boolean_achievement = false ; } } } // set staff achievement $total_star = 0 ; $select_monthly = $mysqli->query( "SELECT SUM(staff_star) as total_star FROM staff_monthly_achievement WHERE deleted_at IS NULL AND staff_id = '".$staff_id."' AND reported_at LIKE '%".date('Y-')."%'" ) ; if ( $select_monthly->num_rows > 0 ){ $row_monthly = $select_monthly->fetch_assoc() ; $total_star = ( $row_monthly['total_star'] != null ? $row_monthly['total_star'] : 0 ) ; } $total_star = ( $total_star + $staff_star ) ; $staff_achievement = 'beginner' ; // get profile achievement $select_achievement = $mysqli->query( "SELECT code, star_from, star_to FROM profile_achievement WHERE deleted_at IS NULL" ) ; if ( $select_achievement->num_rows > 0 ){ while ( $row_achievement = $select_achievement->fetch_assoc() ){ if ( $total_star >= $row_achievement['star_from'] && $total_star < $row_achievement['star_to'] ){ $staff_achievement = $row_achievement['code'] ; } } } $update_query = " staff_point_achievement = '".$point_achievement."', staff_star = '".$staff_star."', staff_achievement = '".$staff_achievement."'," ; } $mysqli->query( "UPDATE staff SET ".$update_query." staff_point = '".$balance."' WHERE staff_id = '".$staff_id."'" ) ; $result = true ; // } } } } return $result ; } function walletMovement( $from_table, $from_id, $type, $difficulty, $staff_id, $amount, $remark ){ global $mysqli ; $result = false ; $select = $mysqli->query( "SELECT wallet_id, wallet_value FROM setting_wallet WHERE deleted_at IS NULL AND wallet_from = '".$from_table."' AND wallet_type = '".$type."' AND difficulty = '".$difficulty."' LIMIT 1" ) ; if ( $select->num_rows > 0 ){ $select_staff = $mysqli->query( "SELECT staff_wallet FROM staff a WHERE a.deleted_at IS NULL AND a.staff_id = '".$staff_id."' AND ( a.staff_date_resigned >= '".date("Y-m-d",time())."' OR a.staff_date_resigned = '0000-00-00' OR a.staff_date_resigned IS NULL ) LIMIT 1" ) ; if ( $select_staff->num_rows > 0 ){ $staff = $select_staff->fetch_assoc() ; $row_select = $select->fetch_assoc() ; $reference_id = $row_select['wallet_id'] ; $amount = ( $row_select['wallet_value'] + $amount ) ; if ( $amount < 0 || $amount > 0 ){ // set staff wallet $select = $mysqli->query( "SELECT balance FROM staff_wallet_movement WHERE deleted_at IS NULL AND staff_id = '".$staff_id."' ORDER BY movement_id DESC LIMIT 1" ) ; $before = 0 ; if ( $select->num_rows > 0 ){ $row = $select->fetch_assoc() ; $before = $row['balance'] ; } // if ( $before == $staff['staff_wallet'] ){ $balance = ( $before + $amount ) ; $mysqli->query( "INSERT INTO staff_wallet_movement ( staff_id, reference_id, from_table, from_id, before_amount, amount, balance, remark ) VALUES ( '".$staff_id."', '".$reference_id."', '".$from_table."', '".$from_id."', '".$before."', '".$amount."', '".$balance."', '".$remark."' )" ) ; $mysqli->query( "UPDATE staff SET staff_wallet = '".$balance."' WHERE staff_id = '".$staff_id."'" ) ; $result = true ; // } } } } return $result ; } function call( $type, $host, $method, $path, $params, $more_curl = [], $port = '443', $connectTimeout = 0 ){ switch ( $type ){ case 'curl' : case 'curl-gzip' : $curl = curl_init() ; curl_setopt_array( $curl, array( CURLOPT_URL => $host, CURLOPT_RETURNTRANSFER => true, CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => $connectTimeout, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => $method, CURLOPT_POSTFIELDS => http_build_query($params), CURLOPT_HTTPHEADER => $path, CURLOPT_ENCODING => 'gzip' ) + $more_curl ) ; $response = curl_exec($curl) ; $result = json_decode( $response, true ) ; curl_close($curl) ; return $result ; break ; case 'curl-json' : $path[] = 'Content-Type:application/json' ; $curl = curl_init() ; curl_setopt_array( $curl, array( CURLOPT_URL => $host, CURLOPT_RETURNTRANSFER => true, CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => $connectTimeout, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => $method, CURLOPT_POSTFIELDS => json_encode( $params ), CURLOPT_HTTPHEADER => $path, CURLOPT_ENCODING => 'gzip' ) + $more_curl ) ; $response = curl_exec($curl) ; $result = json_decode( $response, true ) ; curl_close($curl) ; return $result ; break ; case 'file-contents' : $status = '200' ; $message = '' ; $data = [] ; $params = http_build_query($params) ; $opts = [] ; if ( $method == 'POST' ){ $opts = array('http' => array( 'method' => $method, 'header' => 'Content-Type: application/x-www-form-urlencoded', 'content' => $params ) ) ; }else{ $host .= '?'.$params ; } $context = stream_context_create($opts) ; $result = file_get_contents( $host, false, $context ) ; $data = json_decode( $result, true ) ; return [ 'status' => $status, 'message' => $message, 'data' => $data ] ; break ; case 'no-response' : $status = '500' ; $message = '' ; $data = [] ; $host = str_replace( [ 'http://', 'https://', 'www.' ], '', $host ) ; $server = str_replace( '/', '', $host ) ; $params = http_build_query($params) ; if ( $port == '443' ){ $server = 'ssl://'.$server ; } $fp = fsockopen( $server, $port, $errorCode, $errorInfo, $connectTimeout ) ; if ( !$fp ) { $message = $errorInfo . ' ( '.$errorCode.' )' ; } else { $http .= "$method $path HTTP/1.1\r\n" ; $http .= "Host: $host\r\n" ; $http .= "Content-type: application/x-www-form-urlencoded\r\n" ; $http .= "Content-length: ".strlen($params)."\r\n" ; $http .= "Connection: close\r\n\r\n" ; $http .= $params."\r\n\r\n" ; if ( fputs( $fp, $http ) === false ){ $message = 'Request failed.' ; }else{ $status = '200' ; $message = 'Success' ; while (!feof($fp)) { $data[] = fgets( $fp, 128 ) ; } } fclose($fp) ; } return [ 'status' => $status, 'message' => $message, 'data' => $data ] ; break ; } } function showMessage( $status, $message ){ $script = '' ; if ( checkExists($status) ){ if ( $status <= '200' ){ $script .= 'toastr.success("'.$message[$status].'") ;' ; }else{ $script .= 'toastr.error("'.$message[$status].'") ;' ; } $script = '$(function(){ '.$script.' }) ;' ; unset($_SESSION['error']) ; } return $script ; } function setSecret( $value ){ return md5( COMPANY . $value . SECRETKEY ) ; } function json_return( $status, $data = [] ){ return [ 'status' => $status, 'data' => $data ] ; } function saveLog( $file, $name, $request, $response ){ $path = __DIR__ . '/../logs/' ; $year_folder = $path . date('Y', time()) . '/' ; $month_folder = $year_folder . date('m', time()) . '/' ; $day_folder = $month_folder . date('d', time()) . '/' ; if ( !file_exists($year_folder) ){ mkdir($year_folder, 0751) ; } if ( !file_exists($month_folder) ){ mkdir($month_folder, 0751) ; } if ( !file_exists($day_folder) ){ mkdir($day_folder, 0751) ; } $file_name = $day_folder . date('H') . '-' . $file . '.txt' ; if ( file_exists($file_name) ) { $fh = fopen($file_name, 'a') ; } else { $fh = fopen($file_name, 'w') ; } $log = '=====================================' . "\r\n" . 'CALL ::: ' . $name . "\r\n" . 'URL ::: ' . $_SERVER["REQUEST_URI"] . "\r\n" . 'TIME START ::: ' . TODAYDATE."\r\n" . 'TIME END ::: ' . date('Y-m-d H:i:s', time()) . "\r\n" . 'REQUEST ::: ' . json_encode($request) . "\r\n" . 'RESPONSE ::: ' . json_encode($response) . "\r\n" . '=====================================' . "\r\n\r\n\r\n\r\n\r\n" ; fwrite( $fh, $log ) ; fclose( $fh ) ; // fwrite($fh, '====================================='."\r\n") ; // fwrite($fh, 'CALL ::: '.$name."\r\n") ; // fwrite($fh, 'URL ::: '.$_SERVER["REQUEST_URI"]."\r\n") ; // fwrite($fh, 'TIME START ::: '.TODAYDATE."\r\n") ; // fwrite($fh, 'TIME END ::: '.date('Y-m-d H:i:s', time())."\r\n") ; // fwrite($fh, 'REQUEST ::: '.json_encode($request)."\r\n") ; // fwrite($fh, 'RESPONSE ::: '.json_encode($response)."\r\n") ; // fwrite($fh, '====================================='."\r\n\r\n\r\n\r\n\r\n") ; // fclose($fh) ; } function getTaskRelatedStaff( $task_id, $created_by, $assigned_by ){ global $mysqli ; $push_staffid[$created_by] = $created_by ; $push_staffid[$assigned_by] = $assigned_by ; $select = $mysqli->query( "SELECT * FROM task_joinstaff WHERE task_id = '".$task_id."'" ) ; if ( $select->num_rows > 0 ){ while ( $row = $select->fetch_assoc() ){ $push_staffid[$row['staff_id']] = $row['staff_id'] ; } } return $push_staffid ; } function getMonthlyAchievement( $year, $staff_id ){ global $mysqli ; $list = [] ; for ( $a = 1 ; $a <= 12 ; $a++ ){ $month = strPad(2, $a) ; $reported_at = date( 'Y-m-d', strtotime( $year.'-'.$month.'-01' ) ) ; $list[$month] = [ 'reported_at' => $reported_at, 'staff_point_achievement' => 0, 'staff_star' => 0, 'staff_achievement' => 0 ] ; } $select = $mysqli->query( "SELECT reported_at, staff_point_achievement, staff_star, staff_achievement FROM staff_monthly_achievement WHERE deleted_at IS NULL AND staff_id = '".$staff_id."' AND reported_at LIKE '%".$year."-%' ORDER BY created_at ASC" ) ; if ( $select->num_rows > 0 ){ while ( $row = $select->fetch_assoc() ){ $month = date( 'm', strtotime( $row['reported_at'] ) ) ; $list[$month] = $row ; } } return $list ; } function sendEmail( $to, $from, $title, $body ){ $header = 'From: "'.$from.'" <'.$from .'>'.PHP_EOL. 'MIME-Version: 1.0'.PHP_EOL. 'Content-type: text/html; charset=utf-8'.PHP_EOL. 'Content-Transfer-Encoding: 8bit'.PHP_EOL. 'X-Mailer: PHP/'.PHP_VERSION.PHP_EOL ; // send to owner mail( $to, $title, $body, $header ) ; } function getWork( $type, $selected_day, $morning_in, $morning_out, $break_in, $afternoon_out, $shortbreak_in, $night_out, $working_ot_start ){ $list_work = '00:00:00' ; $list_ot = '00:00:00' ; if ( $type == 'normal' ){ $total_break = '00:00:00' ; $total_shortbreak = '00:00:00' ; $total_ot = '00:00:00' ; // check last out if ( $night_out == '00:00:00' ){ $night_out = $afternoon_out ; } if ( $night_out == '00:00:00' ){ $night_out = $morning_out ; } if ( $night_out == '00:00:00' ){ $night_out = $morning_in ; } // get total working hours $start = new DateTime($morning_in) ; $end = new DateTime($night_out) ; $total_work = $start->diff($end)->format('%H:%I:%S') ; // total break if ( $morning_out != '00:00:00' && $break_in != '00:00:00' ){ $start = new DateTime($morning_out) ; $end = new DateTime($break_in) ; $total_break = $start->diff($end)->format('%H:%I:%S') ; } // total short break if ( $afternoon_out != '00:00:00' && $shortbreak_in != '00:00:00' ){ $start = new DateTime($afternoon_out) ; $end = new DateTime($shortbreak_in) ; $total_shortbreak = $start->diff($end)->format('%H:%I:%S') ; } // if staff no ot if ( $night_out > $working_ot_start ){ // total ot // working_ot_start -> 19:00 // afternoon_out -> 18:00 $start = new DateTime($working_ot_start) ; $end = new DateTime($night_out) ; $total_ot = $start->diff($end)->format('%H:%I:%S') ; $total_subot = '00:00:00' ; if ( $morning_out > $working_ot_start && $break_in != '00:00:00' ){ $start = new DateTime($morning_out) ; $end = new DateTime($break_in) ; $total_subot = $start->diff($end)->format('%H:%I:%S') ; } $total_ot = subtractTime( $total_ot, $total_subot ) ; $total_subot = '00:00:00' ; if ( $afternoon_out > $working_ot_start && $shortbreak_in != '00:00:00' ){ $start = new DateTime($afternoon_out) ; $end = new DateTime($shortbreak_in) ; $total_subot = $start->diff($end)->format('%H:%I:%S') ; } $total_ot = subtractTime( $total_ot, $total_subot ) ; } $total_ot = roundOt( $total_ot ) ; // count total work & ot $list_work = subtractTime( $total_work, $total_break ) ; $list_work = subtractTime( $list_work, $total_shortbreak ) ; $list_work = subtractTime( $list_work, $total_ot ) ; $list_ot = $total_ot ; } if ( $type == 'weekend' || $type == 'holiday' ){ $first = '00:00:00' ; $second = '00:00:00' ; $third = '00:00:00' ; if ( $morning_in != '00:00:00' && $morning_out != '00:00:00' ){ $start = new DateTime($morning_in) ; $end = new DateTime($morning_out) ; $first = $start->diff($end)->format('%H:%I:%S') ; } if ( $break_in != '00:00:00' && $afternoon_out != '00:00:00' ){ $start = new DateTime($break_in) ; $end = new DateTime($afternoon_out) ; $second = $start->diff($end)->format('%H:%I:%S') ; } if ( $shortbreak_in != '00:00:00' && $night_out != '00:00:00' ){ $start = new DateTime($selected_day.' '.$shortbreak_in) ; $end = new DateTime($selected_day.' '.$night_out) ; if ( $shortbreak_in > $night_out ){ $end->modify('+1 day'); } $third = $start->diff($end)->format('%H:%I:%S') ; } $list_work = addTime( $first, $second ) ; $list_work = addTime( $list_work, $third ) ; } $total_work = addTime( $list_work, $list_ot ) ; return [ 'total' => $total_work, 'work' => $list_work, 'ot' => $list_ot ] ; } function roundOt( $ot ){ $ot = explode(':', $ot) ; $ot_h = $ot['0'] ; $ot_m = $ot['1'] ; if ( $ot_m < 15 ){ $ot_m = '00' ; }elseif ( $ot_m < 30 ){ $ot_m = '15' ; }elseif ( $ot_m < 45 ){ $ot_m = '30' ; }elseif ( $ot_m < 60 ){ $ot_m = '45' ; } return $ot_h.':'.$ot_m.':00' ; } function getTotalHour( $start, $end ){ $start = new DateTime($start) ; $end = new DateTime($end) ; return $start->diff($end)->format('%H:%I:%S') ; ; } function calculateAllHours( $hoursList ){ // Initialize a DateInterval object with 0 hours $totalInterval = new DateInterval('PT0S'); // Loop through the list of hours and add each one to the total foreach ($hoursList as $hour) { list($h, $m, $s) = explode(':', $hour); $totalInterval->h += (int)$h; $totalInterval->i += (int)$m; $totalInterval->s += (int)$s; } // Normalize the DateInterval $totalInterval->i += floor($totalInterval->s / 60); $totalInterval->s = $totalInterval->s % 60; $totalInterval->h += floor($totalInterval->i / 60); $totalInterval->i = $totalInterval->i % 60; // Format the total hours $totalHoursFormatted = $totalInterval->format('%H:%I:%S'); // Format the total hours return $totalHoursFormatted ; } function getRest( $morning_out, $break_in, $afternoon_out, $shortbreak_in ){ $list_rest = '00:00:00' ; if ( $morning_out != '00:00:00' && $break_in != '00:00:00' ){ $start = new DateTime($morning_out) ; $end = new DateTime($break_in) ; $list_rest = $start->diff($end)->format('%H:%I:%S') ; } if ( $afternoon_out != '00:00:00' && $shortbreak_in != '00:00:00' ){ $start = new DateTime($afternoon_out) ; $end = new DateTime($shortbreak_in) ; $list_rest2 = $start->diff($end)->format('%H:%I:%S') ; $list_rest = addTime( $list_rest, $list_rest2 ) ; } return $list_rest ; } function getLate( $list_late, $break, $working, $check_out, $check_in ){ // get break hours if ( $break != '00:00:00' && $working != '00:00:00' ){ // get working break hours $start = new DateTime($break) ; $end = new DateTime($working) ; $get_working_break = $start->diff($end)->format('%H:%I:%S') ; $get_check_break = '00:00:00' ; if ( $check_out != '00:00:00' && $check_in != '00:00:00' ){ // get check in & out break hours $start = new DateTime($check_out) ; $end = new DateTime($check_in) ; $get_check_break = $start->diff($end)->format('%H:%I:%S') ; } // check if late $get_working_break = date('H:i:s', strtotime($get_working_break.' +5 minutes')) ; if ( $get_check_break > $get_working_break ){ $start = new DateTime($get_check_break) ; $end = new DateTime($get_working_break) ; $get_working_break = $start->diff($end)->format('%H:%I:%S') ; $list_late = addTime( $list_late, $get_working_break ) ; } } $list_late = date('H:i', strtotime($list_late)) ; return $list_late ; } function addTime( $start, $end ){ // explode $end = strtotime($end) ; $hours = date('H', $end) ; $minutes = date('i', $end) ; $seconds = date('s', $end) ; $interval = 'PT'.$hours.'H'.$minutes.'M'.$seconds.'S' ; // P开头代表日期, T=时间, Y=Year...,Sample : P2Y4DT6H8M $start = new DateTime($start) ; $start = $start->add( new DateInterval($interval) ) ; $start = $start->format('H:i:s') ; return $start ; } function subtractTime( $start, $end ){ // explode $end = strtotime($end) ; $hours = date('H', $end) ; $minutes = date('i', $end) ; $seconds = date('s', $end) ; $interval = 'PT'.$hours.'H'.$minutes.'M'.$seconds.'S' ; // P开头代表日期, T=时间, Y=Year...,Sample : P2Y4DT6H8M $start = new DateTime($start) ; $start = $start->sub( new DateInterval($interval) ) ; $start = $start->format('H:i:s') ; return $start ; } function getTotalMonth( $date1, $date2 ){ $ts1 = strtotime( $date1 ) ; $ts2 = strtotime( $date2 ) ; $year1 = date( 'Y', $ts1 ) ; $year2 = date( 'Y', $ts2 ) ; $month1 = date( 'm', $ts1 ) ; $month2 = date( 'm', $ts2 ) ; $diff = ( ( $year2 - $year1 ) * 12 ) + ( $month2 - $month1 ) ; return $diff ; } function setStaffLeaveYear($staff_id){ global $mysqli ; // check if staff exists or not $get_staff = $mysqli->query("SELECT staff_date_joined, staff_date_confirmed, leave_id, sick_id, job_status_id FROM staff WHERE deleted_at IS NULL AND staff_id = '".$staff_id."' LIMIT 1") ; if ( $get_staff->num_rows > 0 ){ $staff = $get_staff->fetch_assoc() ; $staff_date_joined = $staff['staff_date_joined'] ; $staff_date_confirmed = $staff['staff_date_confirmed'] ; $job_status_id = $staff['job_status_id'] ; $date_joined_month = 0 ; // default setting $current_year = date( 'Y', strtotime(TODAYDATE) ) ; $current_month = date( 'm', strtotime(TODAYDATE) ) ; $given_date = $current_year.'-'.$current_month.'-01' ; $divide_month = '' ; switch ( LEAVESETTING ){ case 'quaterly' : switch ( $current_month ){ case 1 : $divide_month = 3 ; break ; case 4 : $divide_month = 6 ; break ; case 7 : $divide_month = 9 ; break ; case 10 : $divide_month = 12 ; break ; } break ; case 'month' : default : $divide_month = $current_month ; } if ( $staff_date_joined != null && $staff_date_joined != '0000-00-00' ){ // insert into list, check if exsits // for unpaid leave $unpaid_days = 365 ; $get_leave_year = $mysqli->query("SELECT leave_year_id FROM staff_leave_year WHERE deleted_at IS NULL AND staff_id = '".$staff_id."' AND leave_type = 'unpaid' AND leave_year = '".$current_year."' LIMIT 1") ; if ( $get_leave_year->num_rows == 0 ){ $mysqli->query("INSERT INTO staff_leave_year (staff_id, leave_type, leave_year, leave_year_from, leave_year_to, leave_record_days, leave_given_days, leave_days, created_at, updated_at) VALUES ('".$staff_id."', 'unpaid', '".$current_year."', '".$current_year."-01-01', '".$current_year."-12-31', '".$unpaid_days."', '".$unpaid_days."', '".$unpaid_days."', '".TODAYDATE."', '".TODAYDATE."')") ; } // insert into list, check if exsits // sick leave $date_joined_year = date('Y', strtotime($staff_date_joined)) ; $date_joined_first = $current_year.'-01-01' ; if ( $date_joined_first > $staff_date_joined ){ $date_joined_end = $date_joined_first ; }else{ $date_joined_end = $staff_date_joined ; } $date_joined_month = getTotalMonth( $staff_date_joined, $date_joined_end ) ; // sick $sick_days = 0 ; if ( $staff['sick_id'] != '0' ){ $get_sick = $mysqli->query("SELECT sick_rules FROM setting_sick WHERE sick_id = '".$staff['sick_id']."' LIMIT 1") ; if ( $get_sick->num_rows > 0 ){ $row_sick = $get_sick->fetch_assoc() ; $sick_rules = jsonEncodeDecode('decode', $row_sick['sick_rules']) ; if ( is_array($sick_rules) ){ foreach ( $sick_rules as $value ){ if ( $date_joined_month >= $value['more_from'] && $date_joined_month < $value['more_to'] ){ $sick_days = $value['more_days'] ; } } } } } // update into db $get_sick_year = $mysqli->query("SELECT leave_year_id FROM staff_leave_year WHERE deleted_at IS NULL AND staff_id = '".$staff_id."' AND leave_type = 'sick' AND leave_year = '".$current_year."' LIMIT 1") ; if ( $get_sick_year->num_rows == 0 ){ $mysqli->query("INSERT INTO staff_leave_year (staff_id, leave_type, leave_year, leave_year_from, leave_year_to, leave_record_days, leave_given_days, leave_days, created_at, updated_at) VALUES ('".$staff_id."', 'sick', '".$current_year."', '".$current_year."-01-01', '".$current_year."-12-31', '".$sick_days."', '".$sick_days."', '".$sick_days."', '".TODAYDATE."', '".TODAYDATE."')") ; } // 1 = confirmed // 2 = under probation // 3 = training / internship if ( $job_status_id == '1' && ( $staff_date_confirmed != null && $staff_date_confirmed != '0000-00-00' ) ){ // insert into list, check if exsits // annual leave $date_joined_from = $current_year.'-01-01' ; $date_joined_to = $current_year.'-12-31' ; if ( $date_joined_from > $staff_date_joined ){ $date_joined_end = $date_joined_from ; }else{ $date_joined_end = $staff_date_joined ; } $date_joined_month = getTotalMonth( $staff_date_joined, $date_joined_end ) ; $date_joined_realmonth = getTotalMonth( $staff_date_joined, TODAYDATE ) ; if ( LEAVEMONTHTYPE == '2' ){ $date_joined_month = $date_joined_realmonth ; } $annual_days = 0 ; $more_give_days = 0 ; // annual if ( $staff['leave_id'] != '0' ){ $get_annual = $mysqli->query("SELECT leave_rules FROM setting_leave WHERE leave_id = '".$staff['leave_id']."' LIMIT 1") ; if ( $get_annual->num_rows > 0 ){ $row_annual = $get_annual->fetch_assoc() ; $annual_rules = jsonEncodeDecode('decode', $row_annual['leave_rules']) ; if ( is_array($annual_rules) ){ foreach ( $annual_rules as $value ){ if ( $date_joined_month >= $value['more_from'] && $date_joined_month < $value['more_to'] ){ $current_minus_month = ( $current_month - 1 ) ; $default_given_day = 0 ; if ( $current_minus_month > 0 ){ $default_given_day = numberFormat( ( $value['more_days'] / 12 * $current_minus_month ) , 2 ) ; $default_given_day = ( numberFormat( ( $value['more_days'] / 12 * $current_minus_month ) , 2 ) - $total_leave_month ) ; } $days = 0 ; $boolean_day = true ; while ( $boolean_day ){ if ( $default_given_day >= 1 ){ $default_given_day -= 1 ; $days++ ; }else{ $boolean_day = false ; } } $annual_days = ( $value['more_days'] - $days ) ; $more_give_days = $value['more_days'] ; } } } } } // insert into list, check if exsits $get_leave_year = $mysqli->query("SELECT leave_year_id, leave_record_days FROM staff_leave_year WHERE deleted_at IS NULL AND staff_id = '".$staff_id."' AND leave_type = 'annual' AND leave_year = '".$current_year."' LIMIT 1") ; if ( $get_leave_year->num_rows == 0 ){ $mysqli->query("INSERT INTO staff_leave_year (staff_id, leave_type, leave_year, leave_year_from, leave_year_to, leave_record_days, leave_given_days, leave_days, created_at, updated_at) VALUES ('".$staff_id."', 'annual', '".$current_year."', '".$date_joined_from."', '".$date_joined_to."', '".$annual_days."', '0', '0', '".TODAYDATE."', '".TODAYDATE."')") ; }else{ if ( ( $date_joined_realmonth - 12 ) > 0 && ( $date_joined_realmonth - 12 ) < 12 ){ $row_leave_year = $get_leave_year->fetch_assoc() ; $mysqli->query("UPDATE staff_leave_year SET leave_record_days = '".$more_give_days."', leave_yearup = '1' WHERE leave_year_id = '".$row_leave_year['leave_year_id']."' AND leave_yearup = '0'") ; } } // monthly given annual leave days $get_leave_year = $mysqli->query("SELECT leave_year_id, leave_record_days FROM staff_leave_year WHERE deleted_at IS NULL AND staff_id = '".$staff_id."' AND leave_type = 'annual' AND leave_year = '".$current_year."' LIMIT 1") ; if ( $get_leave_year->num_rows > 0 ){ $row_leave_year = $get_leave_year->fetch_assoc() ; if ( $divide_month != '' ){ $get_leave_month = $mysqli->query( "SELECT * FROM staff_leave_month WHERE deleted_at IS NULL AND staff_id = '".$staff_id."' AND leave_year_id = '".$row_leave_year['leave_year_id']."' AND given_month = '".$current_month."' LIMIT 1" ) ; if ( $get_leave_month->num_rows == 0 ){ $get_total_leave_month = $mysqli->query( "SELECT SUM(given_day) as total FROM staff_leave_month WHERE deleted_at IS NULL AND staff_id = '".$staff_id."' AND leave_year_id = '".$row_leave_year['leave_year_id']."' AND given_month <= '".$current_month."'" ) ; $row_total_leave_month = $get_total_leave_month->fetch_assoc() ; $total_leave_month = $row_total_leave_month['total'] ; $balance_leave_month = ( $row_leave_year['leave_record_days'] - $total_leave_month ) ; // check month setting, by month or by quaterly $given_day = ( numberFormat( ( $row_leave_year['leave_record_days'] / 12 * $divide_month ) , 2 ) - $total_leave_month ) ; $days = 0 ; $boolean_day = true ; while ( $boolean_day ){ if ( $given_day >= 1 ){ $given_day -= 1 ; $days++ ; }else{ $boolean_day = false ; } } $mysqli->query( "INSERT INTO staff_leave_month ( leave_year_id, staff_id, given_month, given_day, given_date ) VALUES ( '".$row_leave_year['leave_year_id']."', '".$staff_id."', '".$current_month."', '".$days."', '".$given_date."' )" ) ; if ( $days > 0 ){ $mysqli->query( "UPDATE staff_leave_year SET leave_given_days = leave_given_days + ".$days.", leave_days = leave_days + ".$days." WHERE leave_year_id = '".$row_leave_year['leave_year_id']."'" ) ; } } } } } } } } function getCurrentCountry(){ $myip = '' ; if (!empty($_SERVER['HTTP_CLIENT_IP'])) { $myip = $_SERVER['HTTP_CLIENT_IP'] ; } else if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $myip = $_SERVER['HTTP_X_FORWARDED_FOR'] ; } else { $myip = $_SERVER['REMOTE_ADDR'] ; } $curl = curl_init() ; curl_setopt_array($curl, array( CURLOPT_URL => 'http://www.geoplugin.net/json.gp?ip=' . $myip, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'GET', )); $response = curl_exec($curl); curl_close($curl) ; return json_decode( $response, true ) ; } function showTabs( $table, $key, $id, $list ){ global $mysqli, $LANGS, $lang ; $lang_content = [] ; if ( $id != '' ){ $select = $mysqli->query( "SELECT * FROM " . $table . " WHERE ".$key." = '".$id."'" ) ; if ( $select->num_rows > 0 ){ while ( $row = $select->fetch_assoc() ){ foreach ( $list as $klist => $vlist ){ $lang_content[$row['lang']][$klist] = $row[$klist] ; } } } } $html = '
' ; foreach ( $LANGS as $klang => $vlang ){ $html .= '
' ; foreach ( $list as $klist => $vlist ){ switch ( $vlist['type'] ){ case 'input' : $html .= '
'.$vlist['title'].'
' ; break ; case 'textarea' : $html .= '
'.$vlist['title'].'
' ; break ; case 'file' : $html .= '
'.$vlist['title'].'
'.( $vlist['size'] != '' ? ''.$vlist['size'].'' : '' ).'
' ; if ( $lang_content[$klang][$klist] != '' ){ $html .= '
'.$lang['preview'].'
' ; }else{ $html .= '' ; } break ; } } $html .= '
' ; } $html .= '
' ; return $html ; } function checkLangUpdate( $table, $key, $id, $lang, $list ){ global $mysqli ; $select = $mysqli->query( "SELECT * FROM ".$table." WHERE ".$key." = '".$id."' AND lang = '".$lang."' LIMIT 1" ) ; // only query only if ( $select->num_rows > 0 ){ $query_update = [] ; foreach ( $list as $k => $v ){ if ( $v['type'] != 'file' ){ $query_update[] = $k . " = '" . $v['value'] . "'" ; } } $mysqli->query( "UPDATE ".$table." SET ".implode(',', $query_update)." WHERE ".$key." = '".$id."' AND lang = '".$lang."'" ) ; }else{ $query_key = '' ; $query_value = '' ; foreach ( $list as $k => $v ){ if ( $v['type'] != 'file' ){ $query_key .= ", " . $k ; $query_value .= ", '" . $v['value'] . "'" ; } } $mysqli->query( "INSERT INTO ".$table." ( ".$key.", lang ".$query_key." ) VALUES ( '".$id."', '".$lang."' ".$query_value." )" ) ; } // upload file only foreach ( $list as $k => $v ){ if ( $v['type'] == 'file' ){ $image = $v['value']["name"] ; $remove_photo = $v['remove_photo'] ; if ( $remove_photo == 1 ){ $mysqli->query( "UPDATE ".$table." SET ".$k." = '' WHERE ".$key." = '".$id."' AND lang = '".$lang."'" ) ; }else{ if ( $image != '' ){ $get_image = pathinfo($image) ; $create_image = reCreateImage( $v['folder'], $lang, $id, '', $image, $v['value']['type'], $v['value']['tmp_name'] ) ; if ( $create_image['result'] && is_array($create_image['crop']) && count($create_image['result']) > 0 ){ $resizeObj = new resize($create_image['original']) ; // Initialise load image foreach( $create_image['crop'] as $value ){ $resizeObj -> resizeImage($value['width'], $value['height'], $value['type']) ; $resizeObj -> saveImage($value['source'], 70) ; // Save image } $get_image = pathinfo($create_image['image']) ; $mysqli->query( "UPDATE ".$table." SET ".$k." = '".$create_image['image']."' WHERE ".$key." = '".$id."' AND lang = '".$lang."'" ) ; } } } } } } function uploadImageBased64($path, $file_name, $source, $file_type = ''){ $result = false ; // $s = $_SERVER["DOCUMENT_ROOT"].'/Uploads/'.$path.'/'.$file_name ; $b = $_SERVER["DOCUMENT_ROOT"].'/uploads/'.$path.'/'.$file_name ; $data = explode( ',', $source ); $file = fopen($b, "wb"); //(you can put jpg, png or any other extension) fwrite($file, base64_decode($data[1])); fclose($file); // check file size if(filesize($b) > 0){ $result = true; } return $result ; } function fromExcelToLinux($excel_time) { return date( 'Y-m-d', ($excel_time-25569)*86400 ) ; } function mergeImageWithContent ( $file, $content ){ $html = ' '.( $file != '' ? '' : '' ).' '.$content.' ' ; return $html ; } function resetGetParams( $parameter, $filterout ){ $param = '' ; foreach ( $parameter as $k => $v ){ if ( $v != '' ){ if ( !in_array( $k, $filterout ) ){ $param .= '&'.$k.'='.$v ; } } } return $param ; } function calculateTax($type, $salary, $category, $category2){ global $mysqli; include '../read_csv.php'; return $tax; } function calculateTaxEPF($type, $salary, $age, $citizen){ global $mysqli; include '../read_csv.php'; return $tax; } function calculateTaxSOCSO($type, $salary, $category){ global $mysqli; include '../read_csv.php'; return $tax; } function calculateTaxEIS($type, $salary){ global $mysqli; include '../read_csv.php'; return $tax; } function calculateTaxZAKAT($salary, $rate){ $tax = $salary * $rate / 100; return $tax; } function roundNearestRinggit($number){ if(fmod($number, 1) !== 0.0){ $explode = explode(".", $number); $return = $explode[0] + 1; }else{ $return = $number; } return $return; } function userTierQuery( $user ){ $tiers = [] ; if ( $user['user_tier'] != '' ){ $temp = explode( ',', $user['user_tier'] ) ; foreach ( $temp as $k => $v ){ $temp_v = str_replace( [ '|' ], '', $v ) ; $temp_v = trim( $temp_v ) ; if ( $temp_v != '' ){ $tiers[] = $temp_v ; } } } if ( count($tiers) == 0 ){ $tiers[] = -1 ; } return [ 'check' => ( $user['user_permission'] == 'admin' ? false : true ), 'tiers' => $tiers ] ; } function rmsCall( $api, $array ){ $data_post = 'POST' ; $data_path = RMSAPIURL.$api ; $data_content = $array ; $data_content_json = json_encode( $data_content ) ; $data_datetime = gmdate("Y-m-d\TH:i:s\Z") ; $data_terminal = RMSAPITERMINAL ; $data_terminal_base64 = base64_encode($data_terminal) ; $data_key = RMSAPIKEY ; $post_data = $data_post . $data_path . $data_content_json . $data_datetime . $data_terminal ; $signature = hash_hmac( "sha1", $post_data, RMSAPIKEY ) ; $signaturetobase64 = base64_encode( $signature ) ; $call = call( 'curl-json', $data_path, $data_post, [ 'Authorization: mol-req-sign '.$data_terminal_base64.':'.$signaturetobase64, 'x-mol-date-time: '.$data_datetime ], $data_content ) ; return $call ; } function generateQrcode( $require_path, $qrcode, $qrcodegenerate ){ require_once( $require_path.'plugins/phpqrcode/qrlib.php' ) ; $outputqrcode = $require_path.'qrcodes/'.$qrcode.'.png' ; QRcode::png($qrcodegenerate, $outputqrcode, 'L', 10, 1) ; return [ 'qrcode' => $qrcode, 'url' => PATH.'qrcodes/'.$qrcode.'.png', ] ; // return [ // 'qrcode' => $qrcode, // 'url' => 'https://chart.googleapis.com/chart?chs=500x500&cht=qr&chl='.$qrcode, // ] ; } ?>