[evolvis-commits] r7061: Backup, almost finished, needs to be optimized and fine tuned.

papel at evolvis.org papel at evolvis.org
Mon Nov 8 15:57:53 CET 2010


Author: papel
Date: 2010-11-08 15:57:53 +0100 (Mon, 08 Nov 2010)
New Revision: 7061

Modified:
   branches/papel-reporting/common/pm/taskReportingController.class.php
   branches/papel-reporting/common/pm/taskReportingError.class.php
   branches/papel-reporting/common/pm/taskReportingInfo.class.php
   branches/papel-reporting/common/pm/taskReportingModel.class.php
   branches/papel-reporting/common/pm/taskReportingView.class.php
   branches/papel-reporting/www/pm/reporting/taskCreatePdfTemplate.php
   branches/papel-reporting/www/pm/reporting/taskCreateReportGui.php
Log:
Backup, almost finished, needs to be optimized and fine tuned.

Modified: branches/papel-reporting/common/pm/taskReportingController.class.php
===================================================================
--- branches/papel-reporting/common/pm/taskReportingController.class.php	2010-11-03 15:39:33 UTC (rev 7060)
+++ branches/papel-reporting/common/pm/taskReportingController.class.php	2010-11-08 14:57:53 UTC (rev 7061)
@@ -241,81 +241,6 @@
 		return $result; 
 	}
 	
-	/**
- 	 *  loginToActivity() - Needed to log in to activity
-	 *
-     * 	@param string protocol prefix - empty string or "ssl://" if ssl is used.
-     *  @param string host - Activity host
-     *  @param int port - Activity port
-     *  @param string username
-     *  @param string password
-     * 
-     *  @return string session id - needed in all HTTP Headers of post or get requests to get authorization and access
-     */
-		private function loginToActivity($protocolPrefix='', $host='', $port = 0, $username, $password) {
-			
-			$resultArray_ = array('','');
-			
-			$objReportingInfo = $this->getObjReportingInfo();
-			
-    		$activityProtocolPrefix = $protocolPrefix;
-			
-			$fp = fsockopen($activityProtocolPrefix.$host, $port, $errno, $errstr, 0); // 0 = Seconds of connection timeout
-
-			if($errno === 0 && !$objReportingInfo->isInsufficientConfigInfo()) { // 0 = No error Connection
-							  													 // 111 = Connection refused			  													 
-			
-			stream_set_blocking($fp, 1); // 1 = blocking mode
-						        		 // 0 = non blocking mode
-
-			$data = "username=$username&password=$password&submit=Anmelden";
-			fputs($fp, "GET /api/activities?evolvisTaskId=123 HTTP/1.1\n");
-			fputs($fp, "Host: $host:$port\n");
-			fputs($fp, "Content-length: ".strlen($data)."\n");
-			fputs($fp, "Content-Type: application/x-www-form-urlencoded\n\n");
-			fputs($fp, $data);
-
-		$result = '';
-		$i = 0;
-		$flag = array(false, false);
-		
-     	while(!feof($fp)) {
-         	$result .= fgetss($fp, 1);
-         	
-         	if(!$result || $result = '') {
-         		$objReportingInfo->setServiceUnavailableError('Hours done not available. Activity');
-         		break;
-         	}
-         	
-         	$flag = $objReportingInfo->catchHTTPStatusCodeInfo($result, _('An error on login on Activity occurred. Hours done not available.'));
-
-         		if($flag[1]) { break; } //An error occurred
-
-			 if(strpos($result, "JSESSIONID=")){ $flag[0] = true; }
-				if(strpos($result, ";") && $flag[0] == true) {
-					break;
-				} 
-				$i++;
-
-				if($i == 1000) { 
-					break; 
-				}
-     		} 
-     	
-		$resultArray = array();
-		
-		$resultArray = split("JSESSIONID=",$result);
-		$resultArray_=split(";", $resultArray[1]);
-
-        fclose($fp);
-        
-		} else {
-			$objReportingInfo->setConnectionRefusedInfo(_('An error on login on Activity occurred. Hours done not available.'));	
-		}
-		
-     	return $resultArray_[0]; //JSESSIONID
-	}	
-	
 	public function getCurrentDateAsArray() {
 		$currentTimestamp = time();
 		$currentDay = date("j",$currentTimestamp);
@@ -405,19 +330,23 @@
     }
     
     public function display() {
-
+    	
+    	$protocolPrefix = $this->getActivityProtocolPrefix();
+    	$host = $this->getActivityHost();	
+    	$port = $this->getActivityPort();
 		$user = $this->getActivityUser();
 		$password = $this->getActivityUserPass();
-		$port = $this->getActivityPort();
-		$host = $this->getActivityHost();
-		$protocolPrefix = $this->getActivityProtocolPrefix();
 		
-    	$jsessionId = $this->loginToActivity($protocolPrefix, $host, $port, $user, $password);
-    	
+		$selectRequest = $this->getSelectRequest();
+		
+		$evolvisProjectId = $selectRequest['group_id'];
+		#$evolvisProjectId = 69;
+  	
     	$objModel = new taskReportingModel();
+    	$objModel->setObjReportingInfo($this->getObjReportingInfo());
+    	
 		$objView = new taskReportingView();
 
-    	$selectRequest = $this->getSelectRequest();
     	$whereRequest = $this->getWhereRequest();
     	$orderBy = $this->getOrderBy();
     	$groupBy = $this->getGroupBy();
@@ -432,13 +361,22 @@
 			$reportData = array();
 			$reportDataHeader = array();
 			
-			//The current report data			
-			$reportData_ = $objModel->getReportData($selectRequest, $whereRequest, $orderBy, $groupBy, $asc); 
-			$reportDataHeader_ = $objModel->getReportDataHeader();	//Has to be after getReportData())
+			if($selectRequest['hours_done'] || // No need to get the whole project information if only hours done is choosen.
+				$selectRequest['hours_done_max'] ||
+			 		$selectRequest['hours_done_min'] ||
+			 			$selectRequest['hours_done_avg'] ||
+			 				$selectRequest['hours_done_sum']) {
+				$projectInfo = $objModel->getActivityEvolvisProjectInfo($protocolPrefix, $host, $port, $user, $password, $evolvisProjectId);
+			} else {
+				$objModel->testConnectionToActivity($protocolPrefix, $host, $port, $user, $password);
+			}
+    		
+    		$objModel->setProjectInfo($projectInfo);
 			
-			//The current report title
-			//$reportTitle;	
-			
+			$reportData_ = $objModel->getReportData($selectRequest, $whereRequest, $orderBy, $groupBy, $asc); 
+			$reportDataHeader_ = $objModel->getReportDataHeader();	//Has to be after getReportData())	
+
+
 			$newArrReportDataHeader = array();
 			$newArrReportData = array();
 			$newArrReportTitle = array();		
@@ -500,7 +438,9 @@
     			}
 			}
 		
-			}
+		} else {
+			$objModel->testConnectionToActivity($protocolPrefix, $host, $port, $user, $password);
+		}
 		
     	$group_id = $selectRequest['group_id'];
     	

Modified: branches/papel-reporting/common/pm/taskReportingError.class.php
===================================================================
--- branches/papel-reporting/common/pm/taskReportingError.class.php	2010-11-03 15:39:33 UTC (rev 7060)
+++ branches/papel-reporting/common/pm/taskReportingError.class.php	2010-11-08 14:57:53 UTC (rev 7061)
@@ -1,4 +1,10 @@
 <?php
+/**	
+*	Part of Evolvis Reporting Tool 
+*	Copyright © 2010
+*	Patrick Apel <p.apel at tarent.de>
+*	All rights reserved.
+*/
 
 global $gfcommon;
 require_once $gfcommon.'include/Error.class.php'; 

Modified: branches/papel-reporting/common/pm/taskReportingInfo.class.php
===================================================================
--- branches/papel-reporting/common/pm/taskReportingInfo.class.php	2010-11-03 15:39:33 UTC (rev 7060)
+++ branches/papel-reporting/common/pm/taskReportingInfo.class.php	2010-11-08 14:57:53 UTC (rev 7061)
@@ -1,9 +1,11 @@
 <?php
-/** Evolvis Hudson Plugin
- * 
- * @author Patrick Apel, tarent GmbH
- * 
- */
+/**	
+*	Part of Evolvis Reporting Tool 
+*	Copyright © 2010
+*	Patrick Apel <p.apel at tarent.de>
+*	All rights reserved.
+*/
+
 global $gfcommon, $gfplugins;
 require_once $gfcommon.'include/Error.class.php'; 
 require_once $gfcommon.'pm/taskReportingError.class.php';
@@ -82,7 +84,7 @@
 	 *
 	 */
 	public function getInfoMessage() {
-		if ($this->info_state)	{
+		if ($this->info_state)	{			
 			return $this->info_message;
 		} else {
 			return _('No information.');
@@ -171,7 +173,7 @@
 	 * retrieves the localized string for project not available
 	 */
     public function setProjectNotAvailable(){
-		$this->setInfo(_('There is no hudson project available for this evolvis project.'), INFO__PROJECT_NO_AVAILABLE_INFO);
+		$this->setInfo(_('There is no project available for this evolvis project.'), INFO__PROJECT_NO_AVAILABLE_INFO);
 	}
 	
 	/**
@@ -188,7 +190,7 @@
 	 * retrieves the localized string for insufficient configuration info
 	 */
     public function setInsufficientConfigInfo(){
-		$this->setInfo(_('The hudson configuration proberties are wrong or not exact enough.'), INFO__INSUFFICIENT_INFO);
+		$this->setInfo(_('The configuration proberties are wrong or not exact enough.'), INFO__INSUFFICIENT_INFO);
 	}
 	
 	/**

Modified: branches/papel-reporting/common/pm/taskReportingModel.class.php
===================================================================
--- branches/papel-reporting/common/pm/taskReportingModel.class.php	2010-11-03 15:39:33 UTC (rev 7060)
+++ branches/papel-reporting/common/pm/taskReportingModel.class.php	2010-11-08 14:57:53 UTC (rev 7061)
@@ -5,6 +5,12 @@
 *	Patrick Apel <p.apel at tarent.de>
 *	All rights reserved.
 */
+
+global $gfwww, $gfcommon;
+
+require_once $gfcommon.'pm/taskReportingError.class.php';
+require_once $gfcommon.'pm/taskReportingInfo.class.php';
+
 class taskReportingModel {
 
 	private $boolError = false;
@@ -16,9 +22,19 @@
 	private $boolRow = true;
 	
 	private $reportDataHeader;
+	
+	private $objReportingInfo = object;
+	
+	private $strProjectInfo = '';
+	
+	public function setProjectInfo($projectInfo) {
+		$this->strProjectInfo = $projectInfo;
+	}
+	
+	public function getProjectInfo() {
+		return $this->strProjectInfo;
+	}
 
-	private $objReportInfo = object;
-
 	public function setError($boolError) {
 		$this->boolError = $boolError;
 	}
@@ -66,64 +82,193 @@
 	public function getReportDataHeader() {
 		return $this->reportDataHeader;
 	}
-    
-    public function getHoursDoneFromActivity($selectRequest, 
-    	$whereRequest, 
-    		$hours_done, 
-    			$hours_done_max, 
-    				$hours_done_min, 
-    					$hours_done_avg, 
-    						$hours_done_sum) {
-
-			$resultArray_ = array('','');
+	
+	 public function testConnectionToActivity($protocolPrefix='ssl://', $host, $port, $username, $password) {
+		
+		$objReportingInfo = $this->getObjReportingInfo();
+		
+		$activityProtocolPrefix = $protocolPrefix;
+		
+		$fp = fsockopen($activityProtocolPrefix.$host, $port, $errno, $errstr, 3);
+		
+		if($errno === 0 && !$objReportingInfo->isInsufficientConfigInfo()) { 
 			
-    		$hudsonProtocolPrefix = $protocolPrefix;
+		} else {
+			$objReportingInfo->setConnectionRefusedInfo(_('An error on login on Activity occurred. Hours done not available.'));	
+		}
+	}
+	
+	/** getActivityEvolvisProjectInfo()
+	 *
+     * 	@param string protocol prefix - empty string or "ssl://" if ssl is used.
+     *  @param string host - Activity host
+     *  @param int port - Activity port
+     *  @param string username
+     *  @param string password
+     * 
+     *  @return string session id - needed in all HTTP Headers of post or get requests to get authorization and access
+     */
+	public function getActivityEvolvisProjectInfo($protocolPrefix='ssl://', $host, $port, $username, $password, $evolvisProjectId) {
+	
+		$resultArray_ = array('','');
+			
+		$objReportingInfo = $this->getObjReportingInfo();
+			
+    	$activityProtocolPrefix = $protocolPrefix;
 
-			$fp = fsockopen($hudsonProtocolPrefix.$host, $port, $errno, $errstr);
+		$fp = fsockopen($activityProtocolPrefix.$host, $port, $errno, $errstr, 3); // 3 = Seconds of connection timeout
 
-
-			#if($errno === 0 && !$objRefHudsonInfo->isInsufficientConfigInfo()) { // 0 = Nor error Connection
-							  													 // 111 = Connection refused
+		if($errno === 0 && !$objReportingInfo->isInsufficientConfigInfo()) { // 0 = No error Connection
 			
-			stream_set_blocking($fp, 1); // 1 = blocking mode
-						        		 // 0 = non blocking mode
+		stream_set_blocking($fp, 1); // 1 = blocking mode
+						        	 // 0 = non blocking mode
+		$identifier = base64_encode("$username:$password");
+			
+		fputs($fp, "GET /api/activities?evolvisProjectId=$evolvisProjectId HTTP/1.1\n");
+		fputs($fp, "Authorization: Basic ".$identifier." \r\n");
+		fputs($fp, "Host: $host:$port\n");
+		fputs($fp, "Content-Type: application/x-www-form-urlencoded\n\n");
 
-   	 		$data = "j_username=$username&j_password=$password&submit=Anmelden";
+		$result = '';
+
+     	while(!feof($fp)) {	
 		
-			fputs($fp, "GET /api/activities?evolvisTaskId=123 HTTP/1.1\n");
-			fputs($fp, "Host: $host:$port\n");
-			fputs($fp, "Content-length: ".strlen($data)."\n");
-			fputs($fp, "Content-Type: application/x-www-form-urlencoded\n\n");
-			fputs($fp, $data);
-
-		$result = '';
-		$i = 0;
-		#$flag = array(false, false);
-     	while(!feof($fp)) {
-         	$result .= fread($fp, 1);
+         	$result .= fgets($fp);    
          	
-         	#$flag = $objRefHudsonInfo->catchHTTPStatusCodeInfo($result, _('An error on login occurred.'));
-         		#if($flag[1]) { break; } //An error occurred
-
-			 if(strpos($result, "JSESSIONID=")){ $flag[0] = true; }
-				if(strpos($result, ";") && $flag[0] == true) {
-					break;
-				} 
-				#$i++;
-				#if($i == 1000) {break;}
-     	} 
+         	$flag = $objReportingInfo->catchHTTPStatusCodeInfo($result, _('An error occurred.'));
+         	
+         	if($flag[1]) { 
+         		break; 
+         	}
+         	
+         	$pos = strpos($result,']');
+         	if($pos != 0) {
+     			break;
+     		}   
+     	} 	
      	
-		$resultArray = array();
+     	$result = substr($result,strpos($result,'['),$pos);
 
-
         fclose($fp);
         
-		/* } else {
-			$objRefHudsonInfo->setConnectionRefusedError(_('An error on login occurred.'));	
-		} */
-        
-     	#return $resultArray_[0]; //JSESSIONID
-    }
+		} else {
+			$objReportingInfo->setConnectionRefusedInfo(_('An error on login on Activity occurred. Hours done not available.'));	
+		}
+		
+		return $result;
+	}	
+	
+	public function getProjectTaskIdsByString($offcutSqlQuery, $params) {
+		
+		//SELECT Clause
+		$sqlSelectClause = 'SELECT project_task_id';
+		
+		$offcutSqlQuery_ = $sqlSelectClause . $offcutSqlQuery;
+		
+		$res = db_query_params($offcutSqlQuery_, $params);
+		
+		 if(!$res || db_numrows($res) === 0) {
+		 	
+		 	$error = db_error();
+		 	if(trim($error)!='') {
+		 		$this->setError(true);
+		 		$this->setErrorString($error);
+		 	} else {
+		 		$this->setInfoString(_('No row was found.'));
+		 		$this->setRow(false);
+		 	}
+		 	
+		 	return false;
+		 } 
+		 
+		 $arrTaskIds = array();
+		 while ($arr = db_fetch_array($res)) {		
+		 	array_push($arrTaskIds, $arr[0]);
+		 }
+		 
+		return $arrTaskIds;
+	}
+	
+
+	public function getActivityProjectHours($projectTaskIds, $projectInfo) {
+		
+		$projectTask = split('},{',$projectInfo);
+		
+		$arrProjectTaskInfo = array(array());
+		
+		$i = 0;
+		$hours = 0;
+		foreach($projectTask as $pt) {
+			
+			$projectTaskPosition = split(',',$pt);
+			
+			foreach($projectTaskPosition as $pts) {
+				
+				$projectTaskAttrValue = split(':',$pts);
+				
+				if(strpos($projectTaskAttrValue[0],'hours') !=0) {
+					
+					$hours = $projectTaskAttrValue[1];				
+					
+				} elseif (strpos($projectTaskAttrValue[0],'evolvisTaskId') !=0) {
+					
+					$evolvisTaskId = $projectTaskAttrValue[1];
+					
+					foreach($projectTaskIds as $singleProjectTaskId) {
+					
+						if($evolvisTaskId == $singleProjectTaskId) {
+							
+							$arrProjectTaskInfo[$i][0] = $hours;
+							$arrProjectTaskInfo[$i][1] = $evolvisTaskId;
+							
+							$i++;
+						}				
+					}		
+				}	
+			}						
+		}	
+		
+		/* Now we got the evolvis project_task_ids but we need to sort them in the right way like 
+		 * the estimate hours are sorted.
+		 * 
+		 * Do not want to rewrite the loops, so I do it with another loops.
+		 * */
+
+		 $i = 0;
+		 $arrProjectTaskInfo_ = array(array());
+		 foreach($projectTaskIds as $singleProjectTaskId) { 	// 1
+		 														// :
+		 	foreach($arrProjectTaskInfo as $projectTaskInfo) { 	// n
+		 		
+		 		if($singleProjectTaskId == $projectTaskInfo[1]) {
+		 			
+		 			$arrProjectTaskInfo_[0][$i] += $projectTaskInfo[0];
+		 			$arrProjectTaskInfo_[1][$i] = $projectTaskInfo[1];
+		 		}
+		 		
+		 	}
+		 	$i++;
+		 }
+		
+		return $arrProjectTaskInfo_;
+	}
+	
+	public function getMaxActivityHours($projectHours) {	
+		return max($projectHours);
+	}
+	
+	public function getMinActivityHours($projectHours) {
+		return min($projectHours);
+	}
+	
+	public function getAvgActivityHours($projectHours) {		
+		$avgHours = array_sum($projectHours) / count($projectHours);	
+		return round($avgHours, 2);
+	}
+	
+	public function getSumActivityHours($projectHours) {
+		return array_sum($projectHours);
+	}
     
     public function getReportData($selectRequest, $whereRequest, $orderBy='', $groupBy='', $asc=0) {
 
@@ -144,6 +289,12 @@
 		$endDateCountMin = -1;
 		$endDateCountAvg = -1;
 		
+		$doneHoursPos = -1;
+		$maxHoursPos = -1;
+		$minHoursPos = -1;
+		$avgHoursPos = -1;
+		$sumHoursPos = -1;
+		
 		$countFields = 0;
 		//SELECT CLAUSE
 		$selectAllFlag = true;
@@ -171,42 +322,28 @@
 		if($selectRequest['status_name']){ $select.=' project_task_vw.status_name,'; array_push($arrReportHeader,_('Status name')); array_push($arrGroupBy,'project_task_vw.status_name'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
 		if($selectRequest['category_id']){ $select.=' project_task_vw.category_id,'; array_push($arrReportHeader,_('Category id')); array_push($arrGroupBy,'project_task_vw.category_id'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
 		if($selectRequest['category_name']){ $select.=' project_task_vw.category_name,'; array_push($arrReportHeader,_('Category name')); array_push($arrGroupBy,'project_task_vw.category_name'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
-		if($selectRequest['created_by']){$select.=' project_task_vw.created_by,'; array_push($arrReportHeader,_('Created by')); array_push($arrGroupBy,'project_task_vw.created_by'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
-		if($selectRequest['user_name']){$select.=' project_task_vw.user_name,'; array_push($arrReportHeader,_('Username')); array_push($arrGroupBy,'project_task_vw.user_name'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
-		if($selectRequest['realname']){$select.=' project_task_vw.realname,'; array_push($arrReportHeader,_('Real name')); array_push($arrGroupBy,'project_task_vw.realname'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
-		if($selectRequest['start_date']){$select.=' project_task_vw.start_date,'; array_push($arrReportHeader,_('Start date')); array_push($arrGroupBy,'project_task_vw.start_date'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; $startDateCount=$countFields; }
-		if($selectRequest['start_date_max']){$select.=' MAX(project_task_vw.start_date),'; array_push($arrReportHeader,_('Maximal start date'));  $selectAllFlag = false; $aggFuncFlag = true; $countFields++; $startDateCountMax=$countFields; }
-		if($selectRequest['start_date_min']){$select.=' MIN(project_task_vw.start_date),'; array_push($arrReportHeader,_('Minimal start date')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; $startDateCountMin=$countFields; }
-		if($selectRequest['start_date_avg']){$select.=' ROUND(AVG(project_task_vw.start_date)),'; array_push($arrReportHeader,_('Average start date')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; $startDateCountAvg=$countFields; }
-		if($selectRequest['end_date']){$select.=' project_task_vw.end_date,'; array_push($arrReportHeader,_('End date')); array_push($arrGroupBy,'project_task_vw.end_date'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; $endDateCount=$countFields; }
-		if($selectRequest['end_date_max']){$select.=' MAX(project_task_vw.end_date),'; array_push($arrReportHeader,_('Maximal end date')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; $endDateCountMax=$countFields; }
-		if($selectRequest['end_date_min']){$select.=' MIN(project_task_vw.end_date),'; array_push($arrReportHeader,_('Minimal end date')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; $endDateCountMin=$countFields;}
-		if($selectRequest['end_date_avg']){$select.=' ROUND(AVG(project_task_vw.end_date)),'; array_push($arrReportHeader,_('Average end date')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; $endDateCountAvg=$countFields;}
+		if($selectRequest['created_by']){ $select.=' project_task_vw.created_by,'; array_push($arrReportHeader,_('Created by')); array_push($arrGroupBy,'project_task_vw.created_by'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+		if($selectRequest['user_name']){ $select.=' project_task_vw.user_name,'; array_push($arrReportHeader,_('Username')); array_push($arrGroupBy,'project_task_vw.user_name'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+		if($selectRequest['realname']){ $select.=' project_task_vw.realname,'; array_push($arrReportHeader,_('Real name')); array_push($arrGroupBy,'project_task_vw.realname'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+		if($selectRequest['start_date']){ $select.=' project_task_vw.start_date,'; array_push($arrReportHeader,_('Start date')); array_push($arrGroupBy,'project_task_vw.start_date'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; $startDateCount=$countFields; }
+		if($selectRequest['start_date_max']){ $select.=' MAX(project_task_vw.start_date),'; array_push($arrReportHeader,_('Maximal start date'));  $selectAllFlag = false; $aggFuncFlag = true; $countFields++; $startDateCountMax=$countFields; }
+		if($selectRequest['start_date_min']){ $select.=' MIN(project_task_vw.start_date),'; array_push($arrReportHeader,_('Minimal start date')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; $startDateCountMin=$countFields; }
+		if($selectRequest['start_date_avg']){ $select.=' ROUND(AVG(project_task_vw.start_date)),'; array_push($arrReportHeader,_('Average start date')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; $startDateCountAvg=$countFields; }
+		if($selectRequest['end_date']){ $select.=' project_task_vw.end_date,'; array_push($arrReportHeader,_('End date')); array_push($arrGroupBy,'project_task_vw.end_date'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; $endDateCount=$countFields; }
+		if($selectRequest['end_date_max']){ $select.=' MAX(project_task_vw.end_date),'; array_push($arrReportHeader,_('Maximal end date')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; $endDateCountMax=$countFields; }
+		if($selectRequest['end_date_min']){ $select.=' MIN(project_task_vw.end_date),'; array_push($arrReportHeader,_('Minimal end date')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; $endDateCountMin=$countFields;}
+		if($selectRequest['end_date_avg']){ $select.=' ROUND(AVG(project_task_vw.end_date)),'; array_push($arrReportHeader,_('Average end date')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; $endDateCountAvg=$countFields;}
 		if($selectRequest['hours']){ $select.=' project_task_vw.hours,'; array_push($arrReportHeader,_('Hours')); array_push($arrGroupBy,'project_task_vw.hours'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
 		if($selectRequest['hours_max']){ $select.=' MAX(project_task_vw.hours),'; array_push($arrReportHeader,_('Maximal hours')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
 		if($selectRequest['hours_min']){ $select.=' MIN(project_task_vw.hours),'; array_push($arrReportHeader,_('Minimal hours')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
 		if($selectRequest['hours_avg']){ $select.=' ROUND(AVG(project_task_vw.hours)),'; array_push($arrReportHeader,_('Average hours')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
 		if($selectRequest['hours_sum']){ $select.=' SUM(project_task_vw.hours),'; array_push($arrReportHeader,_('Summed hours')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
 
-		/* Need to  get the hours from activity instead from the gforge database */
-		/* if($selectRequest['hours_done'] || 
-			$selectRequest['hours_done_max'] || 
-			$selectRequest['hours_done_min'] || 
-			$selectRequest['hours_done_avg'] || 
-			$selectRequest['hours_done_sum']) {
-				$hours_done = $this->getHoursDoneFromActivity($selectRequest, 
-				$whereRequest, 
-					$selectRequest['hours_done'], 
-						$selectRequest['hours_done_max'],
-							$selectRequest['hours_done_min'],
-								$selectRequest['hours_done_avg'],
-									$selectRequest['hours_done_sum']);
-										array_push($arrGroupBy,'project_task_vw.project_task_id');
-											$selectAllFlag = false;
-			if(!$selectRequest['hours_done']) {
-				$aggFuncFlag = true;
-			}								
-		} */
+		if($selectRequest['hours_done']){ array_push($arrReportHeader,_('Hours done')); $selectAllFlag = false; $countFields++; $doneHoursPos = $countFields;}
+		if($selectRequest['hours_done_max']){ array_push($arrReportHeader,_('Maximum hours done')); $selectAllFlag = false; $countFields++; $maxHoursPos = $countFields;}
+		if($selectRequest['hours_done_min']){ array_push($arrReportHeader,_('Minimum hours done')); $selectAllFlag = false; $countFields++; $minHoursPos = $countFields;}
+		if($selectRequest['hours_done_avg']){ array_push($arrReportHeader,_('Average hours done')); $selectAllFlag = false; $countFields++; $avgHoursPos = $countFields;}
+		if($selectRequest['hours_done_sum']){ array_push($arrReportHeader,_('Summed hours done')); $selectAllFlag = false; $countFields++; $sumHoursPos = $countFields;}
 
 		if($selectRequest['priority']){ $select.=' project_task_vw.priority,'; array_push($arrReportHeader,_('Priority')); array_push($arrGroupBy,'project_task_vw.priority'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
 		if($selectRequest['priority_max']){ $select.=' MAX(project_task_vw.priority),'; array_push($arrReportHeader,_('Maximal priority')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
@@ -299,10 +436,19 @@
 										#_('Average percent complete'));
 										#_('Summed percent complete'));
 										);
-		$startDateCount = 8;								
-		$endDateCount = 9;								
+			$startDateCount = 8;								
+			$endDateCount = 9;								
 		}
 		
+		
+		#if(($selectRequest['hours_done'] ||
+		#	$selectRequest['hours_done_max'] ||
+		#	 	$selectRequest['hours_done_min'] ||
+		#	 		$selectRequest['hours_done_avg'] ||
+		#	 			$selectRequest['hours_done_sum']) && count($selectRequest)==(6-1)) { //1 is $selectRequest['group_id']
+		#	$select = 'project_task_id';			
+		#}
+		
 		// FROM CLAUSE
 		$from = ' FROM project_task_vw'. ' ' .
 				'INNER JOIN project_group_list_vw'. ' ' .
@@ -355,9 +501,9 @@
 			}
 			/* $countParams++;
 			$where.=' GROUP BY $'.$countParams;
-			array_push($params, $prefix.$groupBy); 
+			array_push($params, $prefix.$groupBy);
 			
-			t does not work with placeholders and array params.
+			It does not work with placeholders and array params.
 			So I used the security function enabled through the method
 			db_query_params() in here. */
 			if($groupBy === 'single_group_project_id') {
@@ -435,6 +581,9 @@
 
 		$sqlQuery = $select . $from . $where;
 		
+		$offcutSqlQuery = $from . $where;
+		$offcutSqlQuery_ = preg_replace('/, FROM/', ' FROM',$offcutSqlQuery);
+		
 		$sqlQuery = preg_replace('/, FROM/', ' FROM', $sqlQuery);
 		
 		$res = db_query_params($sqlQuery, $params);
@@ -453,12 +602,41 @@
 		 	return false;
 		 } 
 		 
-		$commaSeparatedReportHeader = implode(',', $arrReportHeader);
+		$commaSeparatedReportHeader = implode('#sepColumn#', $arrReportHeader);
 		$this->setReportDataHeader($commaSeparatedReportHeader); 
 		 
 		$this->setInfoString(_('The PDF file is created.')); 
+
+		$arrProjectTaskIds = $this->getProjectTaskIdsByString($offcutSqlQuery_, $params);
+
+		$projectInfo = $this->getProjectInfo();
+			
+		if($selectRequest['hours_done'] || 
+				$selectRequest['hours_done_max'] ||
+			 		$selectRequest['hours_done_min'] ||
+			 			$selectRequest['hours_done_avg'] ||
+			 				$selectRequest['hours_done_sum']) {
+		 						$projectHours = $this->getActivityProjectHours($arrProjectTaskIds, $projectInfo);
+		} 
 		 
+		if($selectRequest['hours_done_max']) {
+			$maxHours = $this->getMaxActivityHours($projectHours[0]);
+		}
+		
+		if($selectRequest['hours_done_min']) {
+			$minHours = $this->getMinActivityHours($projectHours[0]);	
+		}
+		
+		if($selectRequest['hours_done_avg']) {
+			$avgHours = $this->getAvgActivityHours($projectHours[0]);
+		}
+			
+		if($selectRequest['hours_done_sum']) {
+			$sumHours = $this->getSumActivityHours($projectHours[0]);
+		}
+
 		$result = '';
+		$k = 0;
 		while ($arr = db_fetch_array($res)) {
 		
 			if($selectAllFlag) {
@@ -479,16 +657,31 @@
 					$date = 	date(_('Y-m-d H:i'), $arr[$j]);		
 					$result .= $date;
 
+				} elseif($doneHoursPos-1 == $j) {
+					
+					$result .= $projectHours[0][$k];
+	
+					$k++;
+				} elseif($maxHoursPos-1 == $j) {
+					$result .= $maxHours;
+				} elseif($minHoursPos-1 == $j) {
+					$result .= $minHours;
+				} elseif($avgHoursPos-1 == $j) {
+					$result .= $avgHours;
+				} elseif($sumHoursPos-1 == $j) {	
+					$result .= $sumHours; 
 				} else { 					
 					$result .= $arr[$j];
 				}
-					if($j+1<$countFields) { $result .= ','; }
-					if($j+1==$countFields) { $result .= ';'; }
+				
+					if($j+1<$countFields) { $result .= '#sepColumn#'; }
+					if($j+1==$countFields) { $result .= '#sepRow#'; }
 			}
+
 		}
 		
-		$result = substr($result, 0, strlen($result)-1);
-
+		$result = substr($result, 0, strlen($result)-8);
+			
 		return $result;
 	} 
 
@@ -513,7 +706,7 @@
 		 	$arr_[$i]['group_project_id'] = $arr[0];
 		 	$arr_[$i]['project_name'] = $arr[1];
 
-		 $i++;	
+		 $i++;
 		 }
 		 
 		 return $arr_;

Modified: branches/papel-reporting/common/pm/taskReportingView.class.php
===================================================================
--- branches/papel-reporting/common/pm/taskReportingView.class.php	2010-11-03 15:39:33 UTC (rev 7060)
+++ branches/papel-reporting/common/pm/taskReportingView.class.php	2010-11-08 14:57:53 UTC (rev 7061)
@@ -126,55 +126,55 @@
 		return $this->submitted;
 	}
     
-    public function setPdfTemplate($pdfTemplate) {
-    	$this->pdfTemplate = $pdfTemplate;
-    }
+	public function setPdfTemplate($pdfTemplate) {
+		$this->pdfTemplate = $pdfTemplate;
+	}
     
-    public function getPdfTemplate() {
-    	return $this->pdfTemplate;
-    }
+	public function getPdfTemplate() {
+		return $this->pdfTemplate;
+	}
     
-    public function setGuiTemplate($guiTemplate) {
-    	$this->guiTemplate = $guiTemplate;
-    }
+	public function setGuiTemplate($guiTemplate) {
+		$this->guiTemplate = $guiTemplate;
+	}
+
+	public function getGuiTemplate() {
+		return $this->guiTemplate;
+	}
     
-    public function getGuiTemplate() {
-    	return $this->guiTemplate;
-    }
-    
-    public function setSubProjects($arrSubProjects) {
+	public function setSubProjects($arrSubProjects) {
 		$this->arrSubProjects = $arrSubProjects;
-    }
+	}
     
-    public function getSubProjects() {
-    	return $this->arrSubProjects;
-    }
+	public function getSubProjects() {
+		return $this->arrSubProjects;
+	}
     
-    public function setMinMaxStartEndDate($arrMinMaxStartEndDate) {
-    	$this->arrMinMaxStartEndDate = $arrMinMaxStartEndDate;
-    }
+	public function setMinMaxStartEndDate($arrMinMaxStartEndDate) {
+		$this->arrMinMaxStartEndDate = $arrMinMaxStartEndDate;
+	}
     
-    public function getMinMaxStartEndDate() {
-    	return $this->arrMinMaxStartEndDate;
-    }
+	public function getMinMaxStartEndDate() {
+		return $this->arrMinMaxStartEndDate;
+	}
     
-    public function setSelectRequest($selectRequest) {
-    	$this->selectRequest = $selectRequest;
-    }
+	public function setSelectRequest($selectRequest) {
+		$this->selectRequest = $selectRequest;
+	}
     
-    public function getSelectRequest() {
-    	return $this->selectRequest;
-    }
+	public function getSelectRequest() {
+		return $this->selectRequest;
+	}
     
-    public function setWhereRequest($whereRequest) {
-    	$this->whereRequest = $whereRequest;
-    }
+	public function setWhereRequest($whereRequest) {
+		$this->whereRequest = $whereRequest;
+	}
     
-    public function getWhereRequest() {
-    	return $this->whereRequest;
-    }
+	public function getWhereRequest() {
+		return $this->whereRequest;
+	}
     
-    public function setGroupBy($groupBy) {
+	public function setGroupBy($groupBy) {
 		$this->groupBy = $groupBy;
 	}
 	

Modified: branches/papel-reporting/www/pm/reporting/taskCreatePdfTemplate.php
===================================================================
--- branches/papel-reporting/www/pm/reporting/taskCreatePdfTemplate.php	2010-11-03 15:39:33 UTC (rev 7060)
+++ branches/papel-reporting/www/pm/reporting/taskCreatePdfTemplate.php	2010-11-08 14:57:53 UTC (rev 7061)
@@ -80,8 +80,8 @@
 				$reportPDF->Ln(5);	
 			}
    			
-			$arrReportHeader = split(',', $rowReportDataHeader[$n]); //[{Project task id},{Summary}]
-			$arrLenghtPerCell1 = split(',', $arrLenghtPerCell[$n]); //[{21},{91}]
+			$arrReportHeader = split('#sepColumn#', $rowReportDataHeader[$n]); //[{Project task id},{Summary}]
+			$arrLenghtPerCell1 = split('#sepColumn#', $arrLenghtPerCell[$n]); //[{21},{91}]
  
 			for($i; $i<=(count($arrReportHeader)-1); $i++) { //Goes through the first report header (2)	
 
@@ -117,13 +117,13 @@
 			
 		for($o; $o<=$m-1;$o++) { //Goes through the reports merged
 			
-		$arrReportRow = split(';', $rowReportData[$o]);
-		$arrLenghtPerCell2 = split(',', $arrLenghtPerCell[$o]);
+		$arrReportRow = split('#sepRow#', $rowReportData[$o]);
+		$arrLenghtPerCell2 = split('#sepColumn#', $arrLenghtPerCell[$o]);
 		
 			for($j=0; $j<=(count($arrReportRow)-1); $j++) { /* For example 	111,abc
 																			303,def
 																			305,abf */																			
-				$arrReportColumn = split(',', $arrReportRow[$j]);
+				$arrReportColumn = split('#sepColumn#', $arrReportRow[$j]);
 			
 				$l=$k;
 				for ($l; $l<$i; $l++) { /* For example 	111,303,305
@@ -164,12 +164,12 @@
 		$arrColumnSize = array();
 		foreach($arrReportDataHeader as $dataHeader) { 
 
-		$singleDataHeader = split(',',$dataHeader);
+		$singleDataHeader = split('#sepColumn#',$dataHeader);
 		$j=count($singleDataHeader);
 
 		$data = $arrReportData[$h];
 		
-		$singleReportData = split(';',$data);
+		$singleReportData = split('#sepRow#',$data);
 		$k=count($singleReportData);
 		$lenghtPerCell = '';
 		
@@ -181,7 +181,7 @@
 				for($l=0; $l<$k; $l++) {
 				
 					$singleReportDataRow = $singleReportData[$l];
-					$arrReportDataColumn = split(',',$singleReportDataRow);
+					$arrReportDataColumn = split('#sepColumn#',$singleReportDataRow);
 				
 					$lenghtColumn = strlen($arrReportDataColumn[$i]);
 				
@@ -201,7 +201,7 @@
 				$maximalLettersPerCell = $lettersInCellFontSizeOne / $fontSize;			
 				$letterSizeInCellQuotient = $lenghtTotal / $maximalLettersPerCell;
 
-				$lenghtPerCell .= ceil(($lenghtHolder * $letterSizeInCellQuotient)). ',';				
+				$lenghtPerCell .= ceil(($lenghtHolder * $letterSizeInCellQuotient)). '#sepColumn#';				
 			}
 
 		if($i > 0) {

Modified: branches/papel-reporting/www/pm/reporting/taskCreateReportGui.php
===================================================================
--- branches/papel-reporting/www/pm/reporting/taskCreateReportGui.php	2010-11-03 15:39:33 UTC (rev 7060)
+++ branches/papel-reporting/www/pm/reporting/taskCreateReportGui.php	2010-11-08 14:57:53 UTC (rev 7061)
@@ -48,13 +48,13 @@
 	$h = 0;		
 	foreach($reportDataHeader as $dataHeader) {
 
-		$arrReportDataHeader = split(',',$dataHeader);
+		$arrReportDataHeader = split('#sepColumn#',$dataHeader);
 		$j=count($arrReportDataHeader);
 
 		$data = $reportData[$h];
 
-		$arrReportData = split(';',$data);
-		$k=count($arrReportData);
+		$arrReportData = split('#sepRow#',$data);
+		$k=count($arrReportData);	
 		
 			echo '<div class="reportGuiFieldsDivLeft reportGuiFieldsDivLeftColor" style="width:100%">';
 			echo '<div class="reportGuiTxtDivHeaderLeft" style="border:0px; width:100%">';
@@ -79,7 +79,7 @@
 			for($l=0; $l<$k; $l++) {
 	
 				$singleRow = $arrReportData[$l];
-				$arrReportDataColumn = split(',',$singleRow);
+				$arrReportDataColumn = split('#sepColumn#',$singleRow);
 				echo '<div class="reportGuiTxtView">';
 				echo '<div class="reportGuiViewHeader">';
 				echo $arrReportDataColumn[$i]; 
@@ -959,7 +959,7 @@
 						<option value="start_date" <?php if($orderBy === 'start_date') echo 'selected="selected"'; ?>><?php echo _('Start date')?></option>
 						<option value="end_date" <?php if($orderBy === 'end_date') echo 'selected="selected"'; ?>><?php echo _('End date')?></option>
 						<option value="hours" <?php if($orderBy === 'hours') echo 'selected="selected"'; ?>><?php echo _('Hours')?></option>
-						<option value="hours_done" <?php if($orderBy === 'hours_done') echo 'selected="selected"'; ?>><?php echo _('Hours done')?></option>
+						
 						<option value="priority" <?php if($orderBy === 'priority') echo 'selected="selected"'; ?>><?php echo _('Priority')?></option>
 						<option value="percent_complete" <?php if($orderBy === 'percent_complete') echo 'selected="selected"'; ?>><?php echo _('Percent complete')?></option>	
 						<option value="group_id" <?php if($orderBy === 'group_id') echo 'selected="selected"'; ?>><?php echo _('Group id')?></option>
@@ -1002,7 +1002,7 @@
 					<option value="start_date" <?php if($groupBy === 'start_date') echo 'selected="selected"'; ?>><?php echo _('Start date')?></option>
 					<option value="end_date" <?php if($groupBy === 'end_date') echo 'selected="selected"'; ?>><?php echo _('End date')?></option>
 					<option value="hours" <?php if($groupBy === 'hours') echo 'selected="selected"'; ?>><?php echo _('Hours')?></option>
-					<option value="hours_done" <?php if($groupBy === 'hours_done') echo 'selected="selected"'; ?>><?php echo _('Hours done')?></option>
+
 					<option value="priority" <?php if($groupBy === 'priority') echo 'selected="selected"'; ?>><?php echo _('Priority')?></option>
 					<option value="percent_complete" <?php if($groupBy === 'percent_complete') echo 'selected="selected"'; ?>><?php echo _('Percent complete')?></option>	
 					<option value="group_id" <?php if($groupBy === 'group_id') echo 'selected="selected"'; ?>><?php echo _('Group id')?></option>
@@ -1165,7 +1165,7 @@
 			}
 echo '<div class="reportGuiDivParts">'; 
 	echo '';
-	echo $HTML->boxTop(_('PDF Downloads'));
+	echo $HTML->boxTop(_('PDF Download'));
 	echo $HTML->boxBottom();
 	echo '';
 	echo '<div class="reportGuiFieldsDiv">';



More information about the evolvis-commits mailing list