File: /home/storetra12/www/hubstaff-operations/member-projects-read.php
<?php
require_once('../wp-load.php');
require_once('global-vars.php');
function write_member_log($message) {
// Get WordPress root directory
$log_file = ABSPATH . 'project_wise_members_log.txt';
// Convert array or object to readable string
if (is_array($message) || is_object($message)) {
$message = print_r($message, true);
}
// Format message with timestamp
$log_message = "[" . date("Y-m-d H:i:s") . "] " . $message . PHP_EOL;
// Write to log file (append mode)
file_put_contents($log_file, $log_message, FILE_APPEND | LOCK_EX);
}
/* CREATE TABLE FOR SAVE USER WISE RECORD START */
function create_hubstaff_user_wise_record_table_if_not_exists()
{
global $wpdb;
$table_name = $wpdb->prefix . 'hubstaff_user_wise_record';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE IF NOT EXISTS $table_name (
id INT NOT NULL AUTO_INCREMENT,
project_name VARCHAR(255) NOT NULL,
member_name VARCHAR(255) NOT NULL,
hours VARCHAR(50) NOT NULL,
activity VARCHAR(50) NOT NULL,
record_date DATE NOT NULL,
csv_entry ENUM('y', 'n') DEFAULT 'n',
PRIMARY KEY (id)
) $charset_collate;";
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
dbDelta($sql);
}
create_hubstaff_user_wise_record_table_if_not_exists();
/* CREATE TABLE FOR SAVE USER WISE RECORD END */
global $wpdb;
$table_name = $wpdb->prefix . 'hubstaff_members';
$members_array = $wpdb->get_results("SELECT * FROM $table_name where api_for_user = 'n' ");
$final_date = date('Y-m-d');
// $final_date = "2025-04-29";
$table_user_wise_entry = $wpdb->prefix . 'hubstaff_user_wise_record';
// $COUNter = 0;
foreach($members_array as $key => $userinfo){
$COUNter++;
// if($COUNter == 5){
// die();
// }
$member_name = $userinfo->name;
$member_id = $userinfo->user_id;
/* API FOR GET DATA AND SAVE IN DATABASE */
$daily_activity_array = get_daily_Activities($member_id,$final_date);
if( isset($daily_activity_array['code']) ){
wait_few_second_before_call();
$daily_activity_array = get_daily_Activities($member_id,$final_date);
}
// Step 1: Build project map [id => name]
if($daily_activity_array['projects']){
$project_map = array_column($daily_activity_array['projects'], 'name', 'id');
foreach($project_map as $projectId => $projectname ){
// Total tracked time for this project
$totalTracked_m = array_sum(
array_column(
array_filter($daily_activity_array['daily_activities'], fn($a) => $a['project_id'] == $projectId),
'tracked'
)
);
$totalTracked = gmdate("H:i:s", $totalTracked_m);
// Total overall time for this project
$totalOverall = array_sum(
array_column(
array_filter($daily_activity_array['daily_activities'], fn($a) => $a['project_id'] == $projectId),
'overall'
)
);
// Calculate percent
$activityPercent = $totalTracked_m > 0 ? floor(($totalOverall / $totalTracked_m) * 100 + 0.5) : 0;
$inserted = $wpdb->insert(
$table_user_wise_entry,
[
'project_name' => $projectname,
'member_name' => $member_name,
'hours' => $totalTracked,
'activity' => $activityPercent,
'record_date' => $final_date,
'csv_entry' => 'n'
],
[
'%s', // project_name
'%s', // member_name
'%s', // hours
'%s', // activity
'%s', // record_date (format: Y-m-d)
'%s' // csv_entry ('y' or 'n')
]
);
if($inserted){
write_member_log(" ✅ Record inserted successfully! Project Name: $projectname Member Name: $member_name ");
echo " ✅ Record inserted successfully! Project Name: $projectname Member Name: $member_name ";
}else{
write_member_log(" ❌ Failed to insert record! Project Name: $projectname and Member Name: $member_name Reason: DB Conflict! ");
}
}
}else{
write_member_log(" ℹ️ MAY BE PROJECT DATA NOT AVAILAIBLE! Member Name: $member_name and Member ID: $member_id ");
}
$result = $wpdb->update(
$table_name,
[
'api_for_user' => 'y',
],
[ 'user_id' => $member_id ], // WHERE clause`
[ '%s' ], // Value formats
[ '%d' ] // WHERE clause format
);
}
function wait_few_second_before_call(){
write_member_log(" ℹ️ WAITING FOR 300 SECOND TO PASS FOR NEXT API CALL ");
sleep(305);
}
function get_daily_Activities($member_id,$final_date){
sleep(10);
$daily_activity_array = '';
$today = $final_date;
$url = "https://api.hubstaff.com/v2/organizations/35760/activities/daily?date[start]=$today&date[stop]=$today&include=projects&user_ids=$member_id&organization_id=35760";
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
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',
CURLOPT_HTTPHEADER => array(
'Accept: application/json',
'Authorization: Bearer '.HUBSTAFF_ACCESS_TOKEN
),
));
$daily_activity_response = curl_exec($curl);
curl_close($curl);
$daily_activity_array = json_decode($daily_activity_response, true);
if($daily_activity_array['error']){
wait_few_second_before_call();
}
return $daily_activity_array;
}
?>