HEX
Server: LiteSpeed
System: Linux cp13-tx.privatesystems.net 4.18.0-553.40.1.lve.el8.x86_64 #1 SMP Wed Feb 12 18:54:57 UTC 2025 x86_64
User: storetra12 (2696)
PHP: 8.2.32
Disabled: syslog
Upload Files
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;

}

?>