From ea08d0956761b5ad63686dda40f1693d16a2e281 Mon Sep 17 00:00:00 2001
From: Benjamin Renard <benjamin.renard@akka.eu>
Date: Thu, 11 Mar 2021 13:04:23 +0100
Subject: [PATCH] Add WS requests in statistics

---
 php/classes/AmdaStats.php |  99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------
 1 file changed, 68 insertions(+), 31 deletions(-)

diff --git a/php/classes/AmdaStats.php b/php/classes/AmdaStats.php
index dcc0d83..0efed51 100644
--- a/php/classes/AmdaStats.php
+++ b/php/classes/AmdaStats.php
@@ -8,6 +8,7 @@ class AmdaStats {
 
 	public $statXml;
 	public $tasks = array('plot', 'mining', 'print', 'statistics');
+	public $tasksWs = array('ws_print', 'ws_plot');
 	public $tasksAdd = array('ttoper', 'samp', 'upload', 'create', 'images');
 	public $usersToExclude = array('bouchemit', 'impex');
 	public $success = true;
@@ -61,8 +62,24 @@ class AmdaStats {
 				if (!$status) 
 					$this->success = false;
 			}
+			else {
+				$allTasks = array_merge($this->tasks, $this->tasksAdd, $this->tasksWs);
+				$newTask = FALSE;
+				foreach ($allTasks as $task) {
+					$items = $this->statXml->getElementsByTagName($task);
+					if ($items->length == 0) {
+						//add missing task
+						$element = $this->statXml->createElement("$task");
+						$this->statXml->documentElement->appendChild($element);
+						$newTask = TRUE;
+					}
+				}
+               			if ($newTask) {
+					$this->statXml->save(StatsXml);
+				}
+			}
 		}         
-  }
+	}
 
 /*
 *  Merge individual User Stats.xml into one generique Stats.xml
@@ -71,27 +88,33 @@ class AmdaStats {
 		// long procedure
 		ini_set('max_execution_time', 600); 
 		
-		$tags = array_merge($this->tasks, $this->tasksAdd);
+		$allTasks = array_merge($this->tasks, $this->tasksAdd, $this->tasksWs);
 
-		$doc2 = new DomDocument("1.0");
+		$userDoc = new DomDocument("1.0");
 		if ($year == null) $year = date("Y");
 
 		$users=glob(USERPATH."*");
 		foreach ($users as $user) {        
-			 $name2 = $user."/Stats$year.xml";
-
-			if (!file_exists($name2)) continue;
-
-			$doc2->load($name2);
-
-			foreach ($tags as $tag) {    
-				$tag1 = $this->statXml->getElementsByTagName($tag)->item(0);
-				$tag2 = $doc2->getElementsByTagName($tag)->item(0);
-				$items2 = $tag2->getElementsByTagName("item");
-				if ($items2->length > 0) {
-					foreach ($items2 as $item2) {
-						$item1 = $this->statXml->importNode($item2, true);
-						$tag1->appendChild($item1);
+			 $userXmlPath = $user."/Stats$year.xml";
+
+			if (!file_exists($userXmlPath)) continue;
+
+			$userDoc->load($userXmlPath);
+
+			foreach ($allTasks as $task) {
+				$globalTaskItems = $this->statXml->getElementsByTagName($task);
+				if ($globalTaskItems->length == 0)
+					continue;
+				$globalTaskItem = $globalTaskItems->item(0);
+				$userTaskItems = $userDoc->getElementsByTagName($task);
+				if ($userTaskItems->length == 0)
+					continue;
+				$userTaskItem = $userTaskItems->item(0);
+				$userItems = $userTaskItem->getElementsByTagName("item");
+				if ($userItems->length > 0) {
+					foreach ($userItems as $userItem) {
+						$globalItem = $this->statXml->importNode($userItem, true);
+						$globalTaskItem->appendChild($globalItem);
 					}
 				}          
 			}
@@ -109,7 +132,7 @@ class AmdaStats {
 
 		$rootElement = $this->statXml->createElement('stats');
 
-		$allTasks = array_merge($this->tasks, $this->tasksAdd);
+		$allTasks = array_merge($this->tasks, $this->tasksAdd, $this->tasksWs);
 		
 		foreach ($allTasks as $task) {            
 			$element = $this->statXml->createElement("$task");        
@@ -122,7 +145,7 @@ class AmdaStats {
 	}
  
 	public function addTask($user, $task, $vars) {
-	
+
 // 		if (!$this->user) {
 // 			error_log('User is null', 1, email);
 // 			return;
@@ -181,14 +204,18 @@ class AmdaStats {
 		
 		$taskArray = array();
 
-		foreach (array_merge($this->tasks,$this->tasksAdd) as $task) {
-			$theTask = $this->statXml->getElementsByTagName($task)->item(0);
+		foreach (array_merge($this->tasks,$this->tasksAdd, $this->tasksWs) as $task) {
+			$taskItems = $this->statXml->getElementsByTagName($task);
+			if ($taskItems->length < 1)
+				return;
+			$theTask = $taskItems->item(0);
 			$items = $theTask->getElementsByTagName('item');
 			$hints = $items->length;
 
 			$startStop = $this->getStartStop($items, $start, $stop);
-			$taskArray[] = array('task' => $task, 'number' => $hints, 
-										'start' => $startStop[0], 'stop' => $startStop[1]); 
+			
+			$taskArray[] = array('task' => $task, 'number' => $hints,
+				'start' => $startStop[0], 'stop' => $startStop[1]); 
 		}
 
 		$objToReturn = json_encode(array('stats' => $taskArray));
@@ -213,8 +240,13 @@ class AmdaStats {
 			$STOParray = array();
 			$usersArray = array();
 
-			foreach ($this->tasks as $task) {
-				$theTask = $this->statXml->getElementsByTagName($task)->item(0);
+			$dataTasks = array_merge($this->tasks, $this->tasksWs);
+
+			foreach ($dataTasks as $task) {
+				$taskItems = $this->statXml->getElementsByTagName($task);
+				if ($taskItems->length < 1)
+					continue;
+				$theTask = $taskItems->item(0);
 				$items = $theTask->getElementsByTagName('item');
 				$TASKarray = array();
 		
@@ -307,12 +339,17 @@ class AmdaStats {
 		if (!$stop) $stop = 100000000000;
 		
 		$date = array();
-		
-		foreach ($items as $item) {
-			$newDate = strtotime($item->getAttribute('date'));
 
-			if (($newDate > $start) && ($newDate < $stop))
-							$date[] =  $newDate;        
+		if ($items->length < 1) {
+			return array(0, 0);
+		}
+		else {
+			foreach ($items as $item) {
+				$newDate = strtotime($item->getAttribute('date'));
+
+				if (($newDate > $start) && ($newDate < $stop))
+					$date[] =  $newDate;        
+			}
 		}
 
 		return array(min($date), max($date));
@@ -323,7 +360,7 @@ class AmdaStats {
 		if (!file_exists(StatsXml)) return 0;
 		if (!file_exists($inXml)) return 0;
 
-		$tags = array_merge($this->tasks,$this->tasksAdd);
+		$tags = array_merge($this->tasks,$this->tasksAdd, $this->tasksWs);
 
 		$doc1 = new DomDocument("1.0");
 		$doc2 = new DomDocument("1.0");
--
libgit2 0.21.2