[evolvis-commits] r7142: #613 Idee: reporting-Werkzeug integrieren //Backup-Commit. Finally finished, but needs to be tested with the activity-staging system. Source could be optimized in some way.

papel at evolvis.org papel at evolvis.org
Wed Jan 12 11:29:08 CET 2011


Author: papel
Date: 2011-01-12 11:29:08 +0100 (Wed, 12 Jan 2011)
New Revision: 7142

Modified:
   branches/papel-reporting/common/pm/ProjectTaskSqlQueries.php
   branches/papel-reporting/common/pm/taskReportingController.class.php
   branches/papel-reporting/common/pm/taskReportingModel.class.php
   branches/papel-reporting/www/pm/reporting/taskCreateReportGui.php
Log:
#613 Idee: reporting-Werkzeug integrieren //Backup-Commit. Finally finished, but needs to be tested with the activity-staging system. Source could be optimized in some way.

Modified: branches/papel-reporting/common/pm/ProjectTaskSqlQueries.php
===================================================================
--- branches/papel-reporting/common/pm/ProjectTaskSqlQueries.php	2011-01-12 09:58:07 UTC (rev 7141)
+++ branches/papel-reporting/common/pm/ProjectTaskSqlQueries.php	2011-01-12 10:29:08 UTC (rev 7142)
@@ -174,4 +174,105 @@
 	return $arrResult;
 }
 
+
+/**
+ * getProjectTaskMessages() - Returns information about the task
+ * 
+ * @param integer $group_id - The id of the project
+ * @param integer $group_project_id - The id of the sub project
+ * @param integer $project_task_id - The id of the project task
+ * 
+ * @return array $arrResult['comments'][0-n] - comments of the project task
+ * @return string $arrResult['leftover']['user_name'] - the name of the user that posted the messages
+ * @return string $arrResult['leftover']['post_date'] - the date of the posted message
+ * @return string $arrResult['leftover']['summary'] - the summary of the project task
+ * @return string $arrResult['leftover']['details'] - the details of the project task
+ * @return string $arrResult['leftover']['percent_complete'] - percent completed of the task
+ * @return string $arrResult['leftover']['status_name'] - the status of the project task
+ * @return string $arrResult['leftover']['project_name'] - the name of the project
+ * @return string $arrResult['leftover']['group_name'] - the name of the sub project
+ * @return string $arrResult['leftover']['project_task_id'] - the id of the project task
+ */
+function getProjectTaskMessages($project_task_id, $group_project_id, $group_id){				
+			
+	$res = db_query_params('SELECT ' .
+	'project_message_user_vw.body, ' .
+	'project_message_user_vw.user_name, ' .
+	'project_message_user_vw.postdate, ' .
+	
+	'project_task_vw.summary, ' .
+	'project_task_vw.details, ' .
+	'project_task_vw.percent_complete, ' .
+	'project_task_vw.status_name, ' .
+	
+	'project_group_list.project_name, ' .
+	
+	'groups.group_name ' .
+
+	'FROM ' .
+	'project_message_user_vw '.
+	'LEFT JOIN ' .
+	'project_task_vw ' . 
+	'ON ' .
+	'project_message_user_vw.project_task_id = project_task_vw.project_task_id ' .
+	'LEFT JOIN ' .
+	'project_group_list ' .
+	'ON ' .
+	'project_group_list.group_project_id = project_task_vw.group_project_id ' .
+	'LEFT JOIN ' .
+	'groups ' .
+	'ON ' .
+	'groups.group_id = project_group_list.group_id ' .
+	'WHERE ' .
+	'project_message_user_vw.project_task_id = $1 ' .
+	'AND ' .
+	'project_group_list.group_project_id = $2 ' .
+	'AND ' .
+	'groups.group_id = $3 '
+	,array($project_task_id, $group_project_id, $group_id));
+
+	if (!$res || db_numrows($res) < 1) {
+		return false;
+	}
+	
+	$arrResult = array(
+		'comments'=>array(),
+		'leftover'=>array(
+		'user_name'=> '',
+		'post_date' => 0,
+		'summary' => '',
+		'details' => '',
+		'percent_complete' => 0,
+		'status_name' => '',
+		'project_name' => '',
+		'group_name' => '',
+		'project_task_id' => 0,
+		'group_project_id' => 0,
+		'group_id' => 0
+		));
+	
+	$i = 0;
+	
+	while ($arr = db_fetch_array($res)) {
+
+		$i++;
+		array_push($arrResult['comments'],$arr[0]);
+		if($i === 1) {
+			$arrResult['leftover']['user_name'] = $arr[1];
+			$arrResult['leftover']['post_date'] = (int)$arr[2];
+			$arrResult['leftover']['summary'] = $arr[3];
+			$arrResult['leftover']['details'] = $arr[4];
+			$arrResult['leftover']['percent_complete'] = (int)$arr[5];
+			$arrResult['leftover']['status_name'] = $arr[6];
+			$arrResult['leftover']['project_name'] = $arr[7];
+			$arrResult['leftover']['group_name'] = $arr[8];
+			$arrResult['leftover']['project_task_id'] = (int)$project_task_id;
+			$arrResult['leftover']['group_project_id'] = (int)($group_project_id);
+			$arrResult['leftover']['group_id'] = (int)($group_id);
+		}
+	}
+	
+	return $arrResult;
+}
+
 ?>

Modified: branches/papel-reporting/common/pm/taskReportingController.class.php
===================================================================
--- branches/papel-reporting/common/pm/taskReportingController.class.php	2011-01-12 09:58:07 UTC (rev 7141)
+++ branches/papel-reporting/common/pm/taskReportingController.class.php	2011-01-12 10:29:08 UTC (rev 7142)
@@ -267,71 +267,7 @@
 
 		return $evolvisRowCount;
 	}
-	
-   /**
-	* mergeEvolvisActivityData() - Merges the Evolvis and Activity data and returns it.
-	*
-	* @param string $evolvisResult - the values of the string are separated with #sepRow# and #sepColumn#
-	* @param string $activityResult -  the values of the string are separated with ascending or descending
-	* 
-	* @return string $mergeResult
-	*/
-	public function mergeEvolvisActivityData($evolvisResult, $activityResult) {
-		
-		/*
-		foreach($evolvisResult as $evolvisHeader) {
-			echo '<br />$evolvisHeader => '.$evolvisHeader;
-		}
-		
-		echo '<br /><br />';
-		
-		foreach($activityResult as $activityHeader) {
-			echo '<br />$activityHeader => '.$activityHeader;
-		}
 
-		$connector = '';
-		if(trim($activityResult[0]) != '') {
-			$connector = '#sepColumn#';
-		}
-			$mergedHeaders = $evolvisResult[0]. $connector . $activityResult[0];
-		
-		echo '<br /><br />$mergedHeaders => '.$mergedHeaders; */
-
-		/* 
-		$evolvisHeader => Länge#sepColumn#Hours done
-			$activityHeader => Hours done
-			
-			$evolvisData => 0#sepColumn#2#sepRow#0#sepColumn#3#sepRow#0#sepColumn#10#sepRow#0#sepColumn#0#sepRow#0#sepColumn#0#sepRow#0#sepColumn#0
-			$activityData => 2#sepRow#3#sepRow#10 
-			
-			//EVOLVIS:
-			0#sepColumn#2	
-						#sepRow#
-			0#sepColumn#3
-						#sepRow#
-			0#sepColumn#10
-						#sepRow#
-			0#sepColumn#0
-						#sepRow#
-			0#sepColumn#0
-						#sepRow#
-			0#sepColumn#0
-			
-			
-			//ACTIVITY:
-			2
-				#sepRow#
-			3	
-				#sepRow#
-			10 	
-		 */	
-		
-		#$mergedResult = array($mergedHeaders, );
-		$mergedResult = '';
-		
-		return $mergedResult;
-	}
-	
 	public function getFormatActivityDataForResult($selectRequest, $projectHours, $groupBy = false) {
 		
 		$onceFlag = false;		
@@ -510,8 +446,8 @@
 		
 		$selectRequest = $this->getSelectRequest();
 		
-		#$evolvisProjectId = $selectRequest['group_id'];
-		$evolvisProjectId = 69;
+		$evolvisProjectId = $selectRequest['group_id'];
+		#$evolvisProjectId = 69;
   	
     	$objModel = new taskReportingModel();
     	$objModel->setObjReportingInfo($this->getObjReportingInfo());
@@ -539,17 +475,17 @@
 			 				$selectRequest['hours_done_sum']) {
 			 								
 				//REACTIVATE LATER
-				#$projectInfo = $objModel->getActivityEvolvisProjectInfo($protocolPrefix, $host, $port, $user, $password, $evolvisProjectId);
+				$projectInfo = $objModel->getActivityEvolvisProjectInfo($protocolPrefix, $host, $port, $user, $password, $evolvisProjectId);
 				
-				//REMOVE LATER
-				$projectInfo = '[{"id":808,"resource-id":83,"hours":2,"name":"Implementierung","evolvisTaskId":305,"resource-name":"Apel, Patrick","date":"2010-09-09 00:00:00.0","position-id":207,"position-name":"Evolvis Feature Requests"},
+				//FOR TESTING
+				/* $projectInfo = '[{"id":808,"resource-id":83,"hours":2,"name":"Implementierung","evolvisTaskId":305,"resource-name":"Apel, Patrick","date":"2010-09-09 00:00:00.0","position-id":207,"position-name":"Evolvis Feature Requests"},
 				{"id":809,"resource-id":83,"hours":2,"name":"Implementierung","evolvisTaskId":429,"resource-name":"Apel, Patrick","date":"2010-09-09 00:00:00.0","position-id":207,"position-name":"Evolvis Feature Requests"},
 				{"id":810,"resource-id":83,"hours":2,"name":"Implementierung","evolvisTaskId":430,"resource-name":"Apel, Patrick","date":"2010-09-09 00:00:00.0","position-id":207,"position-name":"Evolvis Feature Requests"},
 				{"id":811,"resource-id":83,"hours":8,"name":"Implementierung","evolvisTaskId":305,"resource-name":"Apel, Patrick","date":"2010-09-09 00:00:00.0","position-id":207,"position-name":"Evolvis Feature Requests"}]';
-		
+				*/
 			} else {
 				//REACIVATE LATER
-				#$objModel->testConnectionToActivity($protocolPrefix, $host, $port, $user, $password);
+				$objModel->testConnectionToActivity($protocolPrefix, $host, $port, $user, $password);
 			}
 			
 			/* id: 305 => hours done: 2
@@ -565,160 +501,76 @@
 				Id => 436 */
 
     		$objModel->setProjectInfo($projectInfo);
-			$intValue = $objModel->determineNeededSwitchCase($selectRequest);	
-			$intValue = 0; #Remove if necessary
+			$intValue = $objModel->determineNeededSwitchCase($selectRequest);
 			
+			if($intValue != 5) {
+				$intValue = 0; 
+			}
+		
 			switch($intValue) {
 				case 0: // Evolvis database data and only hours done from the activity database data selected
-				
-					#echo '<br />I am in case 0';
 
 					$groupedActivityData = array();
 					$groupInformation = array(array(array()));
 
-					$evolvisReportData_ = $objModel->getReportData($selectRequest, $whereRequest, $orderBy, $groupBy, $asc, false);
-				
+					$evolvisReportData_ = $objModel->getReportData($selectRequest, $whereRequest, $orderBy, $groupBy, $asc, false);			
 					$evolvisDataHeader_ = $objModel->getReportDataHeader(); // Needs to be after $reportData_
 					
 					$offcutQuery = $objModel->getOffcutQuery();
+					$anotherOffcutQuery = $objModel->getAnotherOffcutQuery();
+						
 					$params = $objModel->getArrSqlParams();		
 										
-					$arrProjectTaskIds = $objModel->getProjectTaskIdsByString($offcutQuery, $params);
-
-					$projectHours = $objModel->getActivityProjectHours($arrProjectTaskIds, $projectInfo);
+					$arrProjectTaskIds = $objModel->getProjectTaskIdsByString($anotherOffcutQuery, $params, $groupBy, $orderBy, $asc);
 					
-					$evolvisDataHeaderAndData = array($evolvisDataHeader_, $evolvisReportData_);
-
+					$projectHours = $objModel->getActivityProjectHours($arrProjectTaskIds, $projectInfo);
+	
 					$evolvisNonAggData = $objModel->getAllChoosenNonAggData($selectRequest, $whereRequest, $orderBy, $groupBy, $asc);
-					$groupInformation = $objModel->getPossibleGroupInformation($evolvisNonAggData, $projectHours);
-							
+					
+					$groupInformation = $objModel->getPossibleGroupInformation($evolvisNonAggData, $projectHours, $selectRequest, $groupBy);
+												
 					/*
 					 * $groupInformation[0][0][0] => project task id
 					 * $groupInformation[0][0][1] => hours
 					 */
 	
 					$arrSqlQuerys = array();
-					
-					$i = 0; 
-					foreach($groupInformation as $info) {						
+
+					$i = 0;
+					foreach($groupInformation as $info) {				
 						$arrSqlQuerys[$i] = $objModel->getReportData2($selectRequest, $whereRequest, $orderBy, $groupBy, $asc, $info);
 						$i++;
 					};
 
 					$arrMergedQuerysAndParams = array(array());
-					$arrMergedQuerysAndParams = $objModel->mergeSqlQuerys($arrSqlQuerys, $selectRequest, $whereRequest, $orderBy, $groupBy, $asc=0, $arrProjectTaskIds);
-					
-					$evolvisReportData_ = $objModel->getReportData3($selectRequest, $whereRequest, $orderBy, $groupBy, $asc, $arrMergedQuerysAndParams, $groupInformation);
-					
+					$arrMergedQuerysAndParams = $objModel->mergeSqlQuerys($arrSqlQuerys, $orderBy, $groupBy, $asc);
+	
+					$selectAllFlag = $arrSqlQuerys[0][2];
+					$countFields = $arrSqlQuerys[0][3];
+					$evolvisReportData_ = $objModel->getReportData3($selectRequest, $whereRequest, $orderBy, $groupBy, $asc, $arrMergedQuerysAndParams, $groupInformation, $selectAllFlag, $countFields);
 					$reportData_ = $evolvisReportData_;
+
+					$evolvisDataHeader_ = $objModel->getReportDataHeader(); // Needs to be after $reportData_
 					$reportDataHeader_ = $evolvisDataHeader_;
-				break;
-				
-				case 1: // Evolvis database data and only activity aggregation functions selected
-					echo '<br />I am in case 1';
 					
-					$reportData_ = $objModel->getReportData($selectRequest, $whereRequest, $orderBy, $groupBy, $asc, true);
-					$reportDataHeader_ = $objModel->getReportDataHeader();
-					
-					$offcutQuery = $objModel->getOffcutQuery();
-					$params = $objModel->getArrSqlParams();			
-										
-					$arrProjectTaskIds = $objModel->getProjectTaskIdsByString($offcutQuery, $params);
-					$projectHours = $objModel->getActivityProjectHours($arrProjectTaskIds, $projectInfo);
-					
-					$activitydataHeaderAndData = $this->getFormatActivityDataForResult($selectRequest, $projectHours);
-
-					//Needs to get grouped by the values choosen
 				break;
 				
-				case 2: // Evolvis database data and activity hours done and activity aggregation functions selected, so all is selected.
-					echo '<br />I am in case 2';
+				case 5:
+					$objModel->getReportData($selectRequest, $whereRequest, $orderBy, $groupBy, $asc, true);
 					
-					$reportData_ = $objModel->getReportData($selectRequest, $whereRequest, $orderBy, $groupBy, $asc, true);
-					$reportDataHeader_ = $objModel->getReportDataHeader();
-					
 					$offcutQuery = $objModel->getOffcutQuery();
 					$params = $objModel->getArrSqlParams();
 										
 					$arrProjectTaskIds = $objModel->getProjectTaskIdsByString($offcutQuery, $params);
 					$projectHours = $objModel->getActivityProjectHours($arrProjectTaskIds, $projectInfo);
 					
-					//getFormatActivityDataForResult
 					$activitydataHeaderAndData = $this->getFormatActivityDataForResult($selectRequest, $projectHours);
 					
-					//NEEDS TO BE TRIED TO GROUPBY HOURS DONE
-					
-					#$this->isEvolvisRowCountBiggerThanActivity($evolvisReportData_, $activityReportData_);			
-					
-				break;
-				
-				case 3: // Only Evolvis database data
-					echo '<br />I am in case 3';
-					$reportData_ = $objModel->getReportData($selectRequest, $whereRequest, $orderBy, $groupBy, $asc, true);
-					$reportDataHeader_ = $objModel->getReportDataHeader();
-					
-					//Ok. Now we can group by and order the data if someone choosed it.
-				break;
-				case 4: // Only Activity database data and some aggregation fields are selected (Just to feel like SQL for usability reasons)
-					echo '<br />I am in case 4';
-					
-					$objModel->getReportData($selectRequest, $whereRequest, $orderBy, $groupBy, $asc, true); /* The method sets 
-						$objModel->setOffcutQuery() and $objModel->setArrSqlParams() those are needed for the right sortation of the activity database data.
-					**/
-					
-					$offcutQuery = $objModel->getOffcutQuery();
-					$params = $objModel->getArrSqlParams();			
-										
-					$arrProjectTaskIds = $objModel->getProjectTaskIdsByString($offcutQuery, $params);
-					$projectHours = $objModel->getActivityProjectHours($arrProjectTaskIds, $projectInfo);
-
-					$activitydataHeaderAndData = $this->getFormatActivityDataForResult($selectRequest, $projectHours);
-					
 					$reportDataHeader_ = $activitydataHeaderAndData[0];
 					$reportData_ = $activitydataHeaderAndData[1];
-
-				break;
-				case 5: // Only Activity database data and only hours done selected (Just to feel like SQL for usability reasons).
-					echo '<br />I am in case 5';
-					$objModel->getReportData($selectRequest, $whereRequest, $orderBy, $groupBy, $asc, true); /* The method sets 
-						$objModel->setOffcutQuery() and $objModel->setArrSqlParams() those are needed for the right sortation of the activity database data.
-					**/
-					$offcutQuery = $objModel->getOffcutQuery();
-					$params = $objModel->getArrSqlParams();
-										
-					$arrProjectTaskIds = $objModel->getProjectTaskIdsByString($offcutQuery, $params);
-					$projectHours = $objModel->getActivityProjectHours($arrProjectTaskIds, $projectInfo);
-					
-					$activitydataHeaderAndData = $this->getFormatActivityDataForResult($selectRequest, $projectHours);
-					
-					$reportDataHeader_ = $activitydataHeaderAndData[0];
-					$reportData_ = $activitydataHeaderAndData[1];
 						
 				break;
-				case 6: //Only Activity database data selected and only activity aggregation fields selected.
-					echo '<br />I am in case 6';
-					
-					$objModel->getReportData($selectRequest, $whereRequest, $orderBy, $groupBy, $asc, true); /* The method sets 
-						$objModel->setOffcutQuery() and $objModel->setArrSqlParams() those are needed for the right sortation of the activity database data.
-					**/
-					$offcutQuery = $objModel->getOffcutQuery();
-					$params = $objModel->getArrSqlParams();
-										
-					$arrProjectTaskIds = $objModel->getProjectTaskIdsByString($offcutQuery, $params);
-					$projectHours = $objModel->getActivityProjectHours($arrProjectTaskIds, $projectInfo);
-
-					$activitydataHeaderAndData = $this->getFormatActivityDataForResult($selectRequest, $projectHours);
-					
-					$reportDataHeader_ = $activitydataHeaderAndData[0];
-					$reportData_ = $activitydataHeaderAndData[1];
-					
-				break;
-				case 7: // Nothing selected. Finished, but maybe I should include hours done too?
-					echo '<br />I am in case 7';
-					$reportData_ = $objModel->getReportData($selectRequest, $whereRequest, $orderBy, $groupBy, $asc, true);
-					$reportDataHeader_ = $objModel->getReportDataHeader();
-				break;
-					
+				
 				default: //6 Can not happen but anyway
 					$reportData_ = $objModel->getReportData($selectRequest, $whereRequest, $orderBy, $groupBy, $asc, false);
 					$reportDataHeader_ = $objModel->getReportDataHeader();
@@ -788,7 +640,7 @@
 		
 		} else {
 			//REACTIVATE LATER
-			#$objModel->testConnectionToActivity($protocolPrefix, $host, $port, $user, $password);
+			$objModel->testConnectionToActivity($protocolPrefix, $host, $port, $user, $password);
 		}
 		
     	$group_id = $selectRequest['group_id'];

Modified: branches/papel-reporting/common/pm/taskReportingModel.class.php
===================================================================
--- branches/papel-reporting/common/pm/taskReportingModel.class.php	2011-01-12 09:58:07 UTC (rev 7141)
+++ branches/papel-reporting/common/pm/taskReportingModel.class.php	2011-01-12 10:29:08 UTC (rev 7142)
@@ -29,6 +29,8 @@
 	
 	private $strOffcutQuery = '';
 	
+	private $strAnotherOffcutQuery = '';
+	
 	private $arrSqlParams = array();
 	
 	public function setProjectInfo($projectInfo) {
@@ -95,6 +97,14 @@
 		return $this->strOffcutQuery;
 	}
 	
+	public function setAnotherOffcutQuery($strAnotherOffcutQuery) {
+		$this->strAnotherOffcutQuery = $strAnotherOffcutQuery;
+	}
+	
+	public function getAnotherOffcutQuery() {
+		return $this->strAnotherOffcutQuery;
+	}
+	
 	public function setArrSqlParams($params) {
 		$this->arrSqlParams = $params;
 	}
@@ -114,7 +124,7 @@
 		if($errno === 0 && !$objReportingInfo->isInsufficientConfigInfo()) { 
 			
 		} else {
-			$objReportingInfo->setConnectionRefusedInfo(_('An error on login on Activity occurred. Hours done not available.'));	
+			$objReportingInfo->setConnectionRefusedInfo(_('An error on login on Activity occurred. Hours done not available.'));
 		}
 	}
 	
@@ -176,7 +186,7 @@
 		}	
 		
 		return $result;
-	}	
+	}
 	
    /**
 	* getProjectTaskIdsByString() - Returns the project task ids sorted the right way. 
@@ -187,24 +197,54 @@
 	* 
 	* @return array $arrTaskIds;
 	*/
-	public function getProjectTaskIdsByString($offcutSqlQuery, $params) {
+	public function getProjectTaskIdsByString($anotherOffcutSqlQuery, $params, $groupBy='', $orderBy='', $asc=0, $countFields) {
 		
 		//SELECT Clause
 		$sqlSelectClause = 'SELECT project_task_id';
 		
-		$offcutSqlQuery_ = $sqlSelectClause . $offcutSqlQuery;
-		$strGroupBy = 'GROUP BY';
+		$sqlQuery = $sqlSelectClause . $anotherOffcutSqlQuery;
 		
-		if(strpos($offcutSqlQuery_, $strGroupBy) != null) {
-			$offcutSqlQuery_ .= ' ,project_task_vw.project_task_id';
-		} 
+		$tblPrefix = '';
+		if($orderBy != '' && get_magic_quotes_gpc() == true) { 
+			switch($orderBy) {
+				case 'single_group_project_id': $tblPrefix = 'project_group_list_vw.';
+				break;
+				case 'project_name': $tblPrefix = 'project_group_list_vw.';
+				break;
+				case 'description': $tblPrefix = 'project_group_list_vw.';
+				default: $tblPrefix = 'project_task_vw.';
+				break;
+			}
+			/* $countParams++;
+			$where.= ' ORDER BY $'.$countParams;
+			array_push($params, $orderBy);
+			
+			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($orderBy === 'single_group_project_id') {
+				$orderBy = 'group_project_id';
+			}
+			
+			$order.= ' ORDER BY '.$tblPrefix.$orderBy; 
+		}
+			
+		#if($groupBy == '' && $orderBy != '')
+		if($orderBy != '') {
+			if($asc === 0) { 
+				$order.= ' ASC';
+			} else { 
+				$order.=' DESC';
+			}
+		}
+		
+		$sqlQuery = $sqlQuery . $order;
 
-		$res = db_query_params($offcutSqlQuery_, $params);
+		$res = db_query_params($sqlQuery, $params);
 		
-		 if(!$res || db_numrows($res) === 0) {
+		 if(!$res || db_numrows($res) == 0) {
 		 	$error = db_error();
 		 	if(trim($error)!='') {
-
 		 		$this->setError(true);
 		 		$this->setErrorString($error);
 		 	} else {
@@ -220,9 +260,48 @@
 		 	array_push($arrTaskIds, $arr[0]);
 		 }
 		 
+		 
+		 
 		return $arrTaskIds;
 	}
 	
+	/* public function getProjectTaskIdsByString_($offcutSqlQuery, $params, $orderBy='', $groupBy='') {
+
+		$searchPattern_ = '/SELECT[a-zA-Z0-9[:space:]\_\+\.\,\/\-]*FROM/';
+
+		if(preg_match($searchPattern_, $offcutSqlQuery)) {
+		
+		} else {
+
+		}
+		
+		$part = preg_replace($searchPattern_, 'SELECT project_task_vw.project_task_id FROM', $offcutSqlQuery);
+		$offcutSqlQuery = $part;
+		
+		$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;
+	} */
+	
    /**
 	* getActivityProjectHours() - Parses the JASON formated activity data about every evolvis project task related to the project into an array.
 	* The data parsed and saved into an array will later be sorted the way the array $projectTaskIds is.
@@ -312,8 +391,6 @@
 		 * $groupInformation[0][0][1] => hours
 		 */
 		 
-		 #GOT $groupInformation[$o][0][1];
-		 
 		$highestValue = $groupInformation[0][1];  
 		for($i=1; $i<count($groupInformation); $i++) {
 			$tmpValue = $groupInformation[$i][1];
@@ -332,8 +409,6 @@
 		 * $groupInformation[0][0][1] => hours
 		 */
 		 
-		 #GOT $groupInformation[$o][0][1];
-		 
 		$lowestValue = $groupInformation[0][1];  
 		for($i=1; $i<count($groupInformation); $i++) {
 			$tmpValue = $groupInformation[$i][1];
@@ -351,8 +426,6 @@
 		 * $groupInformation[0][0][0] => project task id
 		 * $groupInformation[0][0][1] => hours
 		 */
-		 
-		 #GOT $groupInformation[$o][0][1];
 
 		for($i=0; $i<count($groupInformation); $i++) {
 			$tmpValue += $groupInformation[$i][1];
@@ -368,8 +441,6 @@
 		 * $groupInformation[0][0][0] => project task id
 		 * $groupInformation[0][0][1] => hours
 		 */
-		 
-		 #GOT $groupInformation[$o][0][1];
 
 		for($i=0; $i<count($groupInformation); $i++) {
 			$tmpValue += $groupInformation[$i][1];
@@ -378,8 +449,6 @@
 		return $tmpValue;
 	}
 	
-	############################################################
-	
 	public function getMaxActivityHours($projectHours) {
 		return max($projectHours);
 	}
@@ -397,17 +466,19 @@
 		return array_sum($projectHours);
 	}
 	
-	public function getAllChoosenNonAggData($selectRequest, $whereRequest, $orderBy='', $groupBy='', $asc=0) {
+	public function getAllChoosenNonAggData($selectRequest, $whereRequest, $orderBy, $groupBy, $asc) {
 
-		/* This method will group the fields manually submitted without including aggregation fields. We can only call this method if one normal field is selected. If only aggregation fields are selected */
+		/* This method will group the fields manually submitted without including aggregation fields. 
+		 * We can only call this method if one normal field is selected. If only aggregation fields are selected */
 		
 		// SELECT CLAUSE
-		$select = 'SELECT project_task_id,'; //It is not grouped so it does not care.
+		$select = 'SELECT project_task_vw.project_task_id,'; //It is not grouped so it does not care.
 		
-		$selectAllFlag = true; //false?
+		$selectAllFlag = true; 
 		$countFields = 1;
 		
-		#if($selectRequest['project_task_id']) { $select .= 'project_task_vw.project_task_id,'; $countFields++; $selectAllFlag = false;}
+		if($selectRequest['project_task_id']) { $selectAllFlag = false; }
+		
 		if($selectRequest['summary']){ $select .= 'project_task_vw.summary,'; $countFields++; $selectAllFlag = false;}
 		if($selectRequest['details']){ $select .= 'project_task_vw.details,'; $countFields++; $selectAllFlag = false;}
 		if($selectRequest['parent_id']){ $select .= 'project_task_vw.parent_id,'; $countFields++; $selectAllFlag = false;}
@@ -429,9 +500,6 @@
 		if($selectRequest['end_date']){ $select .= 'project_task_vw.end_date,'; $countFields++; $selectAllFlag = false;}
 
 		if($selectRequest['hours']){ $select .= 'project_task_vw.hours,'; $countFields++; $selectAllFlag = false;}
-		
-		/* if($selectRequest['hours_done']){ } Uses in the other cases
-		 */
 
 		if($selectRequest['priority']){ $select .= 'project_task_vw.priority,'; $countFields++; $selectAllFlag = false;}
 
@@ -475,7 +543,33 @@
 		$where.= ' AND project_group_list_vw.group_id = $'.$countParams;
 		array_push($params, $selectRequest['group_id']);
 		
-			if($groupBy == '' && $orderBy != '') {
+		$tblPrefix = '';
+		if($orderBy != '' && get_magic_quotes_gpc() == true) { 
+			switch($orderBy) {
+				case 'single_group_project_id': $tblPrefix = 'project_group_list_vw.';
+				break;
+				case 'project_name': $tblPrefix = 'project_group_list_vw.';
+				break;
+				case 'description': $tblPrefix = 'project_group_list_vw.';
+				default: $tblPrefix = 'project_task_vw.';
+				break;
+			}
+			/* $countParams++;
+			$where.= ' ORDER BY $'.$countParams; 
+			array_push($params, $orderBy);
+			
+			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($orderBy === 'single_group_project_id') {
+				$orderBy = 'group_project_id';
+			}
+			
+			$where.= ' ORDER BY '.$tblPrefix.$orderBy; 
+		}
+			
+		#if($groupBy == '' && $orderBy != '') {
+		if($orderBy != '') {
 			if($asc === 0) { 
 				$where.= ' ASC'; 
 			} else { 
@@ -489,9 +583,9 @@
 		
 		$res = db_query_params($sqlQuery, $params);
 
-		if(!$res || db_numrows($res) === 0) {
-		 	
+		if(!$res || db_numrows($res) == 0) {
 		 	$error = db_error();
+
 		 	if(trim($error)!='') {
 		 		$this->setError(true);
 		 		$this->setErrorString($error);
@@ -508,7 +602,7 @@
 		$arrResult = array(array());
 		while ($arr = db_fetch_array($res)) {
 
-			if($selectAllFlag) {
+			if($selectAllFlag == true) {
 				$countFields = (count($arr) / 2);
 			} 
 			
@@ -518,35 +612,349 @@
 			
 			$k++;
 		}
-
-	/* IMPORTANT:
-	 * gforge=# SELECT hours, COUNT(project_task_id) FROM project_task_vw WHERE project_task_id != 407 GROUP BY hours UNION SELECT hours, COUNT(project_task_id) FROM project_task_vw WHERE project_task_id = 407 GROUP BY hours ORDER BY count;
-     */
- 
+		
 		return $arrResult;
 	}
-	
-	
-	public function getPossibleGroupInformation($evolvisNonAggData, $projectHours) {
-				
-	/* 
-	 * In here I have to create the SQL Queries
-	 */	
+
+	public function getPossibleGroupInformation($evolvisNonAggData, $projectHours, $selectRequest, $groupBy='') {
 	 
 	/* 
-	 * There is a 1:n relation between the evolvis data and the activity data.
-	 * It can be that there is no entry in activity for a task, because no one worked on it.
-	 * So it does no care if it will be grouped or not, because the value of hours done is 0 anyway.
+	 * - There is a 1:n relation between the evolvis data and the activity data.
+	 * 	 It can be that there is no entry in activity for a task, because no one worked on it.
+	 * 
+	 * - If a SQL aggregation function is used, the project hours will be grouped in all possible ways like
+	 *   the sql data. 
 	 */
-				
-	/* IMPORTANT:
-	 * gforge=# SELECT hours, COUNT(project_task_id) FROM project_task_vw WHERE project_task_id != 407 GROUP BY hours UNION SELECT hours, COUNT(project_task_id) FROM project_task_vw WHERE project_task_id = 407 GROUP BY hours ORDER BY count;
-     */
 
+	 	$arrReportHeader = array();
+		
+		$arrGroupBy = array();
+		
+		$aggFuncFlag = false;
+		$onlyAggFuncFlag = true;	
+		
+		#$_projectTaskId = -1;  The projectTaksId has always the index 0 if it is choosen.
+		$summary = -1;
+		$details = -1;
+		$parent_id = -1;
+		$duration = -1;
+		$singleGroupProjectId = -1; 
+		$projectName = -1;
+		$description = -1;
+		$statusId = -1;
+		$statusName = -1;
+		$categoryId = -1;
+		$categoryName = -1;
+		$createdBy = -1;
+		$username = -1;
+		$realName = -1;
+		$startDateCount = -1;
+		$endDateCount = -1;
+		$hours = -1;
+		$priority = -1;
+		$percentComplete = -1;
+		
+		$countFields = 0;
+		//SELECT CLAUSE
+		$selectAllFlag = true;
+		$projectTaskIdChoosen = false;
+		
+		$select ='SELECT ';
+		if($selectRequest['project_task_id']) { $select.=' project_task_vw.project_task_id,'; array_push($arrReportHeader,_('Project task id')); array_push($arrGroupBy,'project_task_vw.project_task_id'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; $projectTaskIdChoosen = true; }
+		if($selectRequest['project_task_id_max']) { $select.=' MAX(project_task_vw.project_task_id),'; array_push($arrReportHeader,_('Maximal project task id')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+		if($selectRequest['project_task_id_min']) { $select.=' MIN(project_task_vw.project_task_id),'; array_push($arrReportHeader,_('Minimal project task id')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+		if($selectRequest['project_task_id_count']) { $select.=' COUNT(project_task_vw.project_task_id),'; array_push($arrReportHeader,_('Project task id count')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+		if($selectRequest['summary']){ $select.=' project_task_vw.summary,';  array_push($arrReportHeader,_('Summary')); array_push($arrGroupBy,'project_task_vw.summary'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; $summary=$countFields; }
+		if($selectRequest['details']){ $select.=' project_task_vw.details,'; array_push($arrReportHeader,_('Details')); array_push($arrGroupBy,'project_task_vw.details'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; $details=$countFields; }
+		if($selectRequest['parent_id']){ $select.=' project_task_vw.parent_id,'; array_push($arrReportHeader,_('Parent id')); array_push($arrGroupBy,'project_task_vw.parent_id'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; $parentId=$countFields; }
+		if($selectRequest['parent_id_max']) { $select.=' MAX(project_task_vw.parent_id),'; array_push($arrReportHeader,_('Maximal parent id')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+		if($selectRequest['parent_id_min']) { $select.=' MIN(project_task_vw.parent_id),'; array_push($arrReportHeader,_('Minimal parent id')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }	
+		if($selectRequest['parent_id_count']) { $select.=' COUNT(project_task_vw.parent_id),'; array_push($arrReportHeader,_('Parent id count')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+		if($selectRequest['duration']) { $select.=' project_task_vw.duration,'; array_push($arrReportHeader,_('Duration')); array_push($arrGroupBy,'duration'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; $duration=$countFields; }
+		if($selectRequest['duration_max']) { $select.=' MAX(project_task_vw.duration),'; array_push($arrReportHeader,_('Maximal duration')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+		if($selectRequest['duration_min']){ $select.=' MIN(project_task_vw.duration),'; array_push($arrReportHeader,_('Minimal duration')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+		if($selectRequest['duration_avg']){ $select.=' ROUND(AVG(project_task_vw.duration)),'; array_push($arrReportHeader,_('Average duration')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+		if($selectRequest['duration_sum']){ $select.=' SUM(project_task_vw.duration),'; array_push($arrReportHeader,_('Summed duration')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+		if($selectRequest['single_group_project_id']){ $select.=' project_group_list_vw.group_project_id,'; array_push($arrReportHeader,_('Group project id')); array_push($arrGroupBy,'project_group_list_vw.group_project_id'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; $singleGroupProjectId=$countFields; }
+		if($selectRequest['project_name']){ $select.=' project_group_list_vw.project_name,'; array_push($arrReportHeader,_('Project name')); array_push($arrGroupBy,'project_group_list_vw.project_name'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; $projectName=$countFields; }
+		if($selectRequest['description']){ $select.=' project_group_list_vw.description,'; array_push($arrReportHeader,_('Description')); array_push($arrGroupBy,'project_group_list_vw.description'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; $description=$countFields; }
+		if($selectRequest['status_id']){ $select.=' project_task_vw.status_id,'; array_push($arrReportHeader,_('Status id')); array_push($arrGroupBy,'project_task_vw.status_id'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; $statusId=$countFields; }
+		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++; $statusName=$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++; $categoryId=$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++; $categoryName=$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++; $createdBy=$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++; $username=$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++; $realName=$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++; }
+		if($selectRequest['start_date_min']){ $select.=' MIN(project_task_vw.start_date),'; array_push($arrReportHeader,_('Minimal start date')); $selectAllFlag = false; $aggFuncFlag = true; $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++; }
+		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++; }
+		if($selectRequest['end_date_max']){ $select.=' MAX(project_task_vw.end_date),'; array_push($arrReportHeader,_('Maximal end date')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+		if($selectRequest['end_date_min']){ $select.=' MIN(project_task_vw.end_date),'; array_push($arrReportHeader,_('Minimal end date')); $selectAllFlag = false; $aggFuncFlag = true; $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++; }
+		if($selectRequest['hours']){ $select.=' project_task_vw.hours,'; array_push($arrReportHeader,_('Hours')); array_push($arrGroupBy,'project_task_vw.hours'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; $hours=$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++; }
+
+		if($selectRequest['priority']){ $select.=' project_task_vw.priority,'; array_push($arrReportHeader,_('Priority')); array_push($arrGroupBy,'project_task_vw.priority'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; $priority=$countFields; }
+		if($selectRequest['priority_max']){ $select.=' MAX(project_task_vw.priority),'; array_push($arrReportHeader,_('Maximal priority')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+		if($selectRequest['priority_min']){ $select.=' MIN(project_task_vw.priority),'; array_push($arrReportHeader,_('Minimal priority')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+		if($selectRequest['priority_avg']){ $select.=' ROUND(AVG(project_task_vw.priority)),'; array_push($arrReportHeader,_('Average priority')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+		if($selectRequest['percent_complete']){ $select.=' project_task_vw.percent_complete,'; array_push($arrReportHeader,_('Percent complete')); array_push($arrGroupBy,'project_task_vw.percent_complete'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; $percentComplete=$countFields; }
+		if($selectRequest['percent_complete_max']){ $select.=' MAX(project_task_vw.percent_complete),'; array_push($arrReportHeader,_('Maximal percent complete')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+		if($selectRequest['percent_complete_min']){ $select.=' MIN(project_task_vw.percent_complete),'; array_push($arrReportHeader,_('Minimal percent complete')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+		if($selectRequest['percent_complete_avg']){ $select.=' ROUND(AVG(project_task_vw.percent_complete)),'; array_push($arrReportHeader,_('Average percent complete')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+		if($selectRequest['percent_complete_sum']){ $select.=' SUM(project_task_vw.percent_complete),'; array_push($arrReportHeader,_('Summed percent complete')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+			
+		if($selectRequest['hours_done']){ array_push($arrReportHeader,_('Hours done')); $selectAllFlag = false; $countFields++; $doneHoursPos = $countFields; $hoursDone=$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($selectAllFlag == true) {
+
+			$projectTaskIdChoosen = true;
+			$select .= ' project_task_vw.project_task_id,
+						project_task_vw.group_project_id,
+						project_task_vw.summary,
+						project_task_vw.details,
+						project_task_vw.percent_complete,
+						project_task_vw.priority,
+						project_task_vw.hours,
+						project_task_vw.start_date,
+						project_task_vw.end_date,
+						project_task_vw.created_by,
+						project_task_vw.status_id,
+						project_task_vw.category_id,
+						project_task_vw.duration,
+						project_task_vw.parent_id,
+						project_task_vw.category_name,
+						project_task_vw.status_name,
+						project_task_vw.user_name,
+						project_task_vw.realname,
+						project_group_list_vw.project_name,
+						project_group_list_vw.description';
+			$arrReportHeader = array(_('Project task id'),
+										_('Group project id'),
+										_('Summary'),
+										_('Details'),
+										_('Percent complete'),
+										_('Priority'),
+										_('Hours'),
+										_('Start date'),
+										_('End date'),
+										_('Created by'),
+										_('Status id'),
+										_('Category id'),
+										_('Duration'),
+										_('Parent id'),
+										_('Category name'),
+										_('Status name'),										
+										_('Username'), 
+										_('Real name'),		
+										_('Project name'),
+										_('Description')
+										);
+			$startDateCount = 8;								
+			$endDateCount = 9;							
+		}
+
+	 /*  
+		$evolvisNonAggData[0][0] => 428
+		$evolvisNonAggData[0][1] => ffffffff
+		$evolvisNonAggData[0][2] => 3
+		$evolvisNonAggData[1][0] => 305
+		$evolvisNonAggData[1][1] => testabc
+		$evolvisNonAggData[1][2] => 1
+		$evolvisNonAggData[2][0] => 429
+		$evolvisNonAggData[2][1] => kjkh
+		$evolvisNonAggData[2][2] => 4
+		$evolvisNonAggData[3][0] => 430
+		$evolvisNonAggData[3][1] => |#´`§%/{}?\!^°-_<>"&
+		$evolvisNonAggData[3][2] => 4
+		$evolvisNonAggData[4][0] => 431
+		$evolvisNonAggData[4][1] => kjkjtz
+		$evolvisNonAggData[4][2] => 7
+		$evolvisNonAggData[5][0] => 436
+		$evolvisNonAggData[5][1] => ffffffff
+		$evolvisNonAggData[5][2] => 3  	
+	  */
+
+	 if(!$aggFuncFlag) { 
+	 	
      	$arrIdsToGroupBy = array(array(array()));
      	$arrIdsToGroupNotBy = array(array(array()));
 			
 		$i = 0;	
+		foreach($evolvisNonAggData as $evolvisData) { //$evolvisNonAggData[0] => $evolvisData
+
+		$dataLoop1 = '';
+		$equalCount = 0;
+		$projectHourId = 0;
+		$projectHour = 0;
+		$idCount = 0;
+		$id_ = '';
+
+			$projectTaskId = $evolvisData[0];
+			
+			foreach($projectHours[1] as $id) {
+				if($projectTaskId == $id) {
+					$id_ = $id;
+						break;
+				}
+				$idCount++;
+			}				
+
+			foreach($evolvisData as $data) { //428,ffffffff,3
+				$dataLoop1 .= $data. ',';					
+			}
+			
+			$dataLoop1_ = split(',',$dataLoop1);
+			$dataLoop1 = '';
+			
+			for($j=1; $j<(count($dataLoop1_)-1); $j++) { $dataLoop1 .= $dataLoop1_[$j].','; }
+
+			$dataLoop1a = $dataLoop1; //ffffffff,3 => No id included anymore
+						
+			if($id_ == '') {
+				$dataLoop1 = $dataLoop1.'0';			
+			} else {
+				$dataLoop1 = $dataLoop1.$projectHours[0][$idCount];
+			}
+				
+			$k = 0;
+			$l = 0;
+			$firstTime = true;
+			foreach($evolvisNonAggData as $evolvisData_) { //$evolvisNonAggData[0] => $evolvisData_
+			$dataLoop2 = '';
+			$id_ = '';
+			$idCount_ = 0;
+				
+				$projectTaskId_ = $evolvisData_[0];
+				foreach($evolvisData_ as $data_) { //428,ffffffff,3
+					$dataLoop2 .= $data_. ',';
+				}		
+
+				$dataLoop2_ = split(',',$dataLoop2);
+				$dataLoop2 = '';
+				
+				for($j=1; $j<(count($dataLoop2_)-1); $j++) { $dataLoop2 .= $dataLoop2_[$j].','; }
+
+				$dataLoop2a = $dataLoop2; //ffffffff,3 => No id included anymore
+				
+				foreach($projectHours[1] as $id) {
+					if($projectTaskId_ == $id) {
+						$id_ = $id;
+							break;
+					}
+					$idCount_++; 
+				}	
+
+				if($id_ == '') {
+					$dataLoop2 = $dataLoop2.'0';			
+				} else {
+					$dataLoop2 = $dataLoop2.$projectHours[0][$idCount_];
+				}
+				
+				if($dataLoop1a == $dataLoop2a && $firstTime == true) { //Without hours done. If $id_ != '' there is an activity entry related to the evolvis entry.
+					
+					if($dataLoop1 == $dataLoop2 && $firstTime == true) { //With hours done. (hours, percent_complete,...,hours done)
+
+						if($projectTaskIdChoosen == true) {
+							$projectTaskId_ = $projectTaskId;
+						}
+						$arrIdsToGroupBy[$i][$k][0] = $projectTaskId_; //$projectTaskId_ //Includes all ids whose choosen fields can be grouped
+						$arrIdsToGroupBy[$i][$k][1] = $projectHours[0][$idCount_];
+						
+						$k++;
+						
+						$firstTime = false;
+					} 
+				}			
+			}
+			$i++;
+		}
+		
+		$arrIdsToGroupBy2  = $arrIdsToGroupBy;
+		
+		//Need to delete double entries
+		for($i = 0; $i < count($arrIdsToGroupBy); $i++) { 
+			
+			for($j = 0; $j < count($arrIdsToGroupBy[$i]); $j++) {
+				
+				$array1 = $arrIdsToGroupBy[$i][$j]; 
+				$count = count($arrIdsToGroupBy[$i][$j]);
+				$sameEntryCount = 0;
+
+				for($k = 0; $k < count($arrIdsToGroupBy2); $k++) {
+					
+					for($l = 0; $l < count($arrIdsToGroupBy2[$k]); $l++) {
+						
+						$array2 = $arrIdsToGroupBy2[$k][$l];
+
+						$array3 = array_diff($array1, $array2);
+
+						if($array3[0] == '') {
+							$sameEntryCount++;
+						}
+
+						if($sameEntryCount > 1 && $groupBy != '') {
+							$arrIdsToGroupBy2[$k][$l][0] = 0;
+							$arrIdsToGroupBy2[$k][$l][1] = 0;
+							$sameEntryCount = 1;
+						} 
+					}
+				}	
+			}
+		}
+
+		//Transfer the data in a new array without empty indexes
+		$arrIdsToGroupBy3 = array(array(array()));
+		$k = 0;
+		$l = 0;
+		
+		$flag = false;
+		for($i = 0; $i < count($arrIdsToGroupBy2); $i++) {
+			
+			$flag = false;
+			for($j = 0; $j < count($arrIdsToGroupBy2[$i]); $j++) {
+
+				if($arrIdsToGroupBy2[$i][$j][0] != 0) {
+					
+					$flag = true;
+					
+					$arrIdsToGroupBy3[$k][$l][0] = $arrIdsToGroupBy2[$i][$j][0];
+					$arrIdsToGroupBy3[$k][$l][1] = $arrIdsToGroupBy2[$i][$j][1];
+					$l++;
+					
+				} 
+			}
+			
+			if($flag == true) {
+				$k++;
+			}
+			
+			$l=0;
+		} 
+
+	/* 
+		Id => 305 | Id => 305
+		Id => 428 
+		Id => 429 | Id => 429
+		Id => 430 | Id => 430 
+		Id => 431
+		Id => 436
+	 */
+	 } else { 
+	 	
+	 	$arrIdsToGroupBy = array(array(array()));
+     	$arrIdsToGroupNotBy = array(array(array()));
+			
+		$i = 0;	
 		foreach($evolvisNonAggData as $evolvisData) {
 
 		$dataLoop1 = '';
@@ -573,7 +981,7 @@
 			$dataLoop1_ = split(',',$dataLoop1);
 			$dataLoop1 = '';
 			
-			for($j=1; $j<(count($dataLoop1_)-1); $j++) { $dataLoop1 .= $dataLoop1_[$j].','; }
+			for($j=1; $j<(count($dataLoop1_)-1); $j++) { $dataLoop1 .= $dataLoop1_[$j].','; } //The data without id
 
 			$dataLoop1a = $dataLoop1;
 			
@@ -599,7 +1007,7 @@
 				$dataLoop2_ = split(',',$dataLoop2);
 				$dataLoop2 = '';
 				
-				for($j=1; $j<(count($dataLoop2_)-1); $j++) { $dataLoop2 .= $dataLoop2_[$j].','; }
+				for($j=1; $j<(count($dataLoop2_)-1); $j++) { $dataLoop2 .= $dataLoop2_[$j].','; } //The data without ids
 
 				$dataLoop2a = $dataLoop2;
 				
@@ -616,10 +1024,10 @@
 				} else {
 					$dataLoop2 = $dataLoop2.$projectHours[0][$idCount_];
 				}
-				
-				if($dataLoop1a == $dataLoop2a) { #&& $id_ != '') {//Without hours done. If $id_ != '' there is an activity entry related to the evolvis entry.
+
+				if($dataLoop1a == $dataLoop2a) { //Without hours done. If $id_ != '' there is an activity entry related to the evolvis entry.
 			
-					if($dataLoop1 == $dataLoop2) { //&& $projectTaskId_ != $projectTaskId; //With hours done. (hours, percent_complete,...,hours done)	
+					if($dataLoop1 == $dataLoop2) { //With hours done. (hours, percent_complete,...,hours done)	
 
 						$arrIdsToGroupBy[$i][$k][0] = $projectTaskId_; //Includes all ids whose choosen fields can be grouped
 						$arrIdsToGroupBy[$i][$k][1] = $projectHours[0][$idCount_];
@@ -634,7 +1042,7 @@
 		$arrIdsToGroupBy2  = $arrIdsToGroupBy;
 		
 		//Need to delete double entries
-		for($i = 0; $i < count($arrIdsToGroupBy); $i++) { //$i => for every of the 46 project task ids //First array
+		for($i = 0; $i < count($arrIdsToGroupBy); $i++) {
 			
 			for($j = 0; $j < count($arrIdsToGroupBy[$i]); $j++) {
 				
@@ -642,7 +1050,7 @@
 				$count = count($arrIdsToGroupBy[$i][$j]);
 				$sameEntryCount = 0;
 
-				for($k = 0; $k < count($arrIdsToGroupBy2); $k++) { //Second array
+				for($k = 0; $k < count($arrIdsToGroupBy2); $k++) {
 					
 					for($l = 0; $l < count($arrIdsToGroupBy2[$k]); $l++) {
 						
@@ -701,17 +1109,19 @@
 		Id => 431
 		Id => 436
 	 */
+	 }
+	 
 		return $arrIdsToGroupBy3;
 	}	
 	
-	public function mergeSqlQuerys($arrSqlQuerys) {
+	public function mergeSqlQuerys($arrSqlQuerys, $orderBy='', $groupBy='', $asc=0) {
 	
 		$query = '';
 		$params = array();
 		for($i = 0; $i < count($arrSqlQuerys); $i++) {
 			$query .= $arrSqlQuerys[$i][0];
 			if((count($arrSqlQuerys)-1) != $i) {
-				$query .= ' UNION ';	
+				$query .= ' UNION ALL ';	
 			}	
 			
 			foreach($arrSqlQuerys[$i][1] as $param) {
@@ -742,13 +1152,43 @@
 		
 		$mergedSqlQuery = $part_;
 		
-		$arrMergedQuerysAndParams[0] = $mergedSqlQuery;
+		$where = '';
+		$tblPrefix = '';
+		if($orderBy != '' && get_magic_quotes_gpc() == true) { 
+			switch($orderBy) {
+				case 'single_group_project_id': $tblPrefix = 'project_group_list_vw.';
+				break;
+				case 'project_name': $tblPrefix = 'project_group_list_vw.';
+				break;
+				case 'description': $tblPrefix = 'project_group_list_vw.';
+				default: $tblPrefix = 'project_task_vw.';
+				break;
+			}
+
+			if($orderBy === 'single_group_project_id') {
+				$orderBy = 'group_project_id';
+			}
+			$tblPrefix = '';
+			
+			$where.= ' ORDER BY '.$tblPrefix.$orderBy; 
+		}
+			
+		#if($groupBy == '' && $orderBy != '') {
+		if($orderBy != '') {
+			if($asc === 0) { 
+				$where.= ' ASC'; 
+			} else { 
+				$where.=' DESC';
+			}
+		}
+		
+		$arrMergedQuerysAndParams[0] = $mergedSqlQuery .$where;
 		$arrMergedQuerysAndParams[1] = $params;
 		
 		return $arrMergedQuerysAndParams;
 	}
 	
-	public function determineNeededSwitchCase($selectRequest) { //I think this method could be removed
+	public function determineNeededSwitchCase($selectRequest) {
 		
 		$evolvisDbData = false;
 		$activityDbData = false;
@@ -955,15 +1395,8 @@
 						project_group_list_vw.description';
 			$arrReportHeader = array(_('Project task id'),
 										_('Group project id'),
-										#_('Maximal project task id'),
-										#_('Minimal project task id'),
-										#_('Project task id count'),
 										_('Summary'),
 										_('Details'),
-										#_('Parent id'),
-										#_('Maximal parent id'),
-										#_('Minimal parent id'),
-										#_('Parent id count'),
 										_('Percent complete'),
 										_('Priority'),
 										_('Hours'),
@@ -974,46 +1407,15 @@
 										_('Category id'),
 										_('Duration'),
 										_('Parent id'),
-										#_('Maximal duration'),
-										#_('Minimal duration'),
-										#_('Average duration'),
-										#_('Summed duration'),
-										#_('Last modified date'),
 										_('Category name'),
 										_('Status name'),										
 										_('Username'), 
 										_('Real name'),		
-										#_('Group project id'),
-										#_('Group id'),
 										_('Project name'),
-										#_('Is plubic'),
 										_('Description')
-										#_('Maximal start date'),
-										#_('Minimal start date'),
-										#_('Average start date'),
-										#_('End date'),
-										#_('Maximal end date'),
-										#_('Minimal end date'),
-										#_('Average end date'),
-										#_('Maximal hours'),
-										#_('Minimal hours'),
-										#_('Average hours'),
-										#_('Summed hours'),
-										#_('Hours done'),
-										#_('Maximal hours done'),
-										#_('Minimal hours done'),
-										#_('Average hours done'),
-										#_('Summed hours done'),
-										#_('Maximal priority'),
-										#_('Minimal priority'),
-										#_('Average priority'),										
-										#_('Maximal percent complete'),
-										#_('Minimal percent complete'),
-										#_('Average percent complete'));
-										#_('Summed percent complete'));
 										);
 			$startDateCount = 8;								
-			$endDateCount = 9;							
+			$endDateCount = 9;					
 		}
 		
 		// FROM CLAUSE
@@ -1077,7 +1479,7 @@
 				$groupBy = 'group_project_id';
 			}
 			
-			$where.= ' GROUP BY ';
+			$group= ' GROUP BY ';
 			$groupBy__ = '';
 			$groupAvailable = false;
 			foreach($arrGroupBy as $groupBy_) {
@@ -1087,29 +1489,29 @@
 				$groupBy__.=' '.$groupBy_.',';
 			}
 
-			$where.= $groupBy__;
+			$group.= $groupBy__;
 			if($groupBy == '') {
-				$where = substr($where, 0, strlen($where)-1);
+				$group = substr($group, 0, strlen($group)-1);
 			}
 			
 			if(!$groupAvailable) {
 				if($groupBy != '') {
-					$where.=$tblPrefix.$groupBy;
+					$group.=$tblPrefix.$groupBy;
 				}
 			} else {
 				if(!$onlyAggFuncFlag) {
-					$where = substr($where, 0, strlen($where)-1);
+					$group= substr($where, 0, strlen($group)-1);
 				} else {
-					$where = substr($where, 0, strlen($where)-8);
+					$group = substr($group, 0, strlen($group)-8);
 				}
 				
 				if($groupBy != '' && !$onlyAggFuncFlag) {	
-					$where.=', '.$tblPrefix.$groupBy;
+					$group.=', '.$tblPrefix.$groupBy;
 				}
 			}
 			
 			if($onlyAggFuncFlag == true && $groupBy == '') {
-				$where = substr($where, 0, strlen($where)-8);
+				$group = substr($group, 0, strlen($group)-8);
 			}
 		}
 		
@@ -1135,29 +1537,39 @@
 				$orderBy = 'group_project_id';
 			}
 			
-			$where.= ' ORDER BY '.$tblPrefix.$orderBy; 
+			$order.= ' ORDER BY '.$tblPrefix.$orderBy; 
 		}
 			
-		if($groupBy == '' && $orderBy != '') {
+		#if($groupBy == '' && $orderBy != '') {
+		if($orderBy != '') {
 			if($asc === 0) { 
-				$where.= ' ASC'; 
+				$order.= ' ASC';
 			} else { 
-				$where.=' DESC'; 
+				$order.=' DESC';
 			}
 		}
 
-		$sqlQuery = $select . $from . $where;
+		$sqlQuery = $select . $from . $where. $group . $order;
 		
-		$offcutSqlQuery = $from . $where;
+		$offcutSqlQuery = $from . $where. $group . $order;
+		$offcutSqlQuery__ = $from . $where;
+		
 		$offcutSqlQuery_ = preg_replace('/, FROM/', ' FROM',$offcutSqlQuery);
+		$offcutSqlQuery___ = preg_replace('/, FROM/', ' FROM',$offcutSqlQuery__);
 
 		$sqlQuery = preg_replace('/, FROM/', ' FROM', $sqlQuery);
 		
 		$res = db_query_params($sqlQuery, $params);
+		
+		$this->setOffcutQuery($offcutSqlQuery_);
+		$this->setAnotherOffcutQuery($offcutSqlQuery___);
+		
+		$this->setArrSqlParams($params);
 
 		if(!$res || db_numrows($res) === 0) {
 		 	
 		 	$error = db_error();
+
 		 	if(trim($error)!='') {
 		 		$this->setError(true);
 		 		$this->setErrorString($error);
@@ -1173,13 +1585,10 @@
 		$this->setReportDataHeader($commaSeparatedReportHeader); 
 		 
 		$this->setInfoString(_('The PDF file is created.')); 
-
-		$this->setOffcutQuery($offcutSqlQuery_);
-		$this->setArrSqlParams($params);
 			
 		if($groupByHoursDone == false) {	
 			
-			$arrProjectTaskIds = $this->getProjectTaskIdsByString($offcutSqlQuery_, $params);
+			$arrProjectTaskIds = $this->getProjectTaskIdsByString($offcutSqlQuery___, $params);
 			
 			$projectInfo = $this->getProjectInfo();
 			
@@ -1207,7 +1616,6 @@
 		while ($arr = db_fetch_array($res)) {
 		
 			if($selectAllFlag) {
-				#if (SELECT *) => $countFields = (count($arr)-3) / 2;
 				$countFields = (count($arr) / 2);
 			} 
 
@@ -1263,15 +1671,13 @@
 		}
 		
 		$result = substr($result, 0, strlen($result)-8);
-
-		//Only returns the formated data.
-
+		
 		return $result;
 	} 
 
 	public function getReportData2($selectRequest, $whereRequest, $orderBy='', $groupBy='', $asc=0, $arrProjectTaskIds) {
 
-		$arrReportHeader = array();		
+		$arrReportHeader = array();
 		$arrGroupBy = array();
 		
 		$aggFuncFlag = false;
@@ -1347,9 +1753,13 @@
 		if($selectRequest['percent_complete_avg']){ $select.=' ROUND(AVG(project_task_vw.percent_complete)),'; array_push($arrReportHeader,_('Average percent complete')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
 		if($selectRequest['percent_complete_sum']){ $select.=' SUM(project_task_vw.percent_complete),'; array_push($arrReportHeader,_('Summed percent complete')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
 
+		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($selectAllFlag == true) { 
-			#$select.= ' *';
 			$select .= ' project_task_vw.project_task_id,
 						project_task_vw.group_project_id,
 						project_task_vw.summary, 
@@ -1372,15 +1782,8 @@
 						project_group_list_vw.description';
 			$arrReportHeader = array(_('Project task id'),
 										_('Group project id'),
-										#_('Maximal project task id'),
-										#_('Minimal project task id'),
-										#_('Project task id count'),
 										_('Summary'),
 										_('Details'),
-										#_('Parent id'),
-										#_('Maximal parent id'),
-										#_('Minimal parent id'),
-										#_('Parent id count'),
 										_('Percent complete'),
 										_('Priority'),
 										_('Hours'),
@@ -1391,43 +1794,12 @@
 										_('Category id'),
 										_('Duration'),			
 										_('Parent id'),
-										#_('Maximal duration'),
-										#_('Minimal duration'),
-										#_('Average duration'),
-										#_('Summed duration'),
-										#_('Last modified date'),
 										_('Category name'),
 										_('Status name'),										
 										_('Username'), 
 										_('Real name'),		
-										#_('Group project id'),
-										#_('Group id'),
 										_('Project name'),
-										#_('Is plubic'),
 										_('Description')
-										#_('Maximal start date'),
-										#_('Minimal start date'),
-										#_('Average start date'),
-										#_('End date'),
-										#_('Maximal end date'),
-										#_('Minimal end date'),
-										#_('Average end date'),
-										#_('Maximal hours'),
-										#_('Minimal hours'),
-										#_('Average hours'),
-										#_('Summed hours'),
-										#_('Hours done'),
-										#_('Maximal hours done'),
-										#_('Minimal hours done'),
-										#_('Average hours done'),
-										#_('Summed hours done'),
-										#_('Maximal priority'),
-										#_('Minimal priority'),
-										#_('Average priority'),										
-										#_('Maximal percent complete'),
-										#_('Minimal percent complete'),
-										#_('Average percent complete'));
-										#_('Summed percent complete'));
 										);
 			$startDateCount = 8;								
 			$endDateCount = 9;								
@@ -1439,7 +1811,7 @@
 				'ON'. ' ' .
 				'project_task_vw.group_project_id = project_group_list_vw.group_project_id'. ' ';
 				 
-		// WHERE CLAUSE		 
+		// WHERE CLAUSE
 		$where = ' WHERE';
 		
 		$params = array();
@@ -1471,9 +1843,15 @@
 		$where.= ' AND project_group_list_vw.group_id = $'.$countParams;
 		array_push($params, $selectRequest['group_id']);
 		
+		$i = 0;
 		foreach($arrProjectTaskIds as $ids) {
 			$countParams ++;
-			$where .= ' OR project_task_id = $'.$countParams;
+			if($i == 0) {
+				$where .= ' AND project_task_id = $'.$countParams;
+			} else {
+				$where .= ' OR project_task_id = $'.$countParams;
+			}
+			$i++;
 			array_push($params, $ids[0]);
 		}
 
@@ -1535,39 +1913,9 @@
 				$where = substr($where, 0, strlen($where)-8);
 			}
 		}
-		
-		$tblPrefix = '';
-		if($orderBy != '' && get_magic_quotes_gpc() == true) { 
-			switch($orderBy) {
-				case 'single_group_project_id': $tblPrefix = 'project_group_list_vw.';
-				break;
-				case 'project_name': $tblPrefix = 'project_group_list_vw.';
-				break;
-				case 'description': $tblPrefix = 'project_group_list_vw.';
-				default: $tblPrefix = 'project_task_vw.';
-				break;
-			}
-			/* $countParams++;
-			$where.= ' ORDER BY $'.$countParams; 
-			array_push($params, $orderBy);
-			
-			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($orderBy === 'single_group_project_id') {
-				$orderBy = 'group_project_id';
-			}
-			
-			$where.= ' ORDER BY '.$tblPrefix.$orderBy; 
-		}
-			
-		if($groupBy == '' && $orderBy != '') {
-			if($asc === 0) { 
-				$where.= ' ASC'; 
-			} else { 
-				$where.=' DESC';
-			}
-		}
+		 
+		$commaSeparatedReportHeader = implode('#sepColumn#', $arrReportHeader);
+		$this->setReportDataHeader($commaSeparatedReportHeader); 
 
 		$sqlQuery = $select . $from . $where;
 		
@@ -1577,13 +1925,16 @@
 		$sqlQuery = preg_replace('/, FROM/', ' FROM', $sqlQuery);
 		
 		$arrSqlQueryInfo = array(array());
-		$arrSqlQueryInfo[0] = $sqlQuery;
-		$arrSqlQueryInfo[1] = $params;	
+		$arrSqlQueryInfo[0] = '( '.$sqlQuery.' )';
+		$arrSqlQueryInfo[1] = $params;
+		$arrSqlQueryInfo[2] = $selectAllFlag;
+		$arrSqlQueryInfo[3] = $countFields;
+
 		
 		return $arrSqlQueryInfo;
 	} 
 	
-	public function getReportData3($selectRequest, $whereRequest, $orderBy='', $groupBy='', $asc=0, $arrMergedQuerysAndParams, $groupInformation) {
+	public function getReportData3($selectRequest, $whereRequest, $orderBy='', $groupBy='', $asc=0, $arrMergedQuerysAndParams, $groupInformation, $selectAllFlag, $countFields) {
 
 		/* $selectRequest needed to know the order of the data, so I can convert the timestamp in a date.
 		 * $whereRequest needed to group and order the merged Query again, so that the whole output will be merged. 
@@ -1672,109 +2023,17 @@
 		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;}
-		
-		// FROM CLAUSE IST NOT NEEDED ANYMORE
-				 
-		// WHERE CLAUSE IST NOT NEEDED ANYMORE		 
+	 
 		$where = '';
-
-		$tblPrefix = '';
-		if($groupBy != '' && get_magic_quotes_gpc() == true 
-			|| $aggFuncFlag == true && get_magic_quotes_gpc() == true) { 
-			switch($groupBy) {
-				case 'single_group_project_id': $tblPrefix = 'project_group_list_vw.';
-				break;
-				case 'project_name': $tblPrefix = 'project_group_list_vw.';
-				break;
-				case 'description': $tblPrefix = 'project_group_list_vw.';
-				default: $tblPrefix = 'project_task_vw.';
-				break;
-			}
-			/* $countParams++;
-			$where.=' GROUP BY $'.$countParams;
-			array_push($params, $prefix.$groupBy);
-			
-			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') {
-				$groupBy = 'group_project_id';
-			}
-			
-			$where.= ' GROUP BY ';
-			$groupBy__ = '';
-			$groupAvailable = false;
-			foreach($arrGroupBy as $groupBy_) {
-				if($groupBy == $groupBy_) {
-					$groupAvailable = true;
-				}
-				$groupBy__.=' '.$groupBy_.',';
-			}
-
-			$where.= $groupBy__;
-			if($groupBy == '') {
-				$where = substr($where, 0, strlen($where)-1);
-			}
-			
-			if(!$groupAvailable) {
-				if($groupBy != '') {
-					$where.=$tblPrefix.$groupBy;
-				}
-			} else {
-				if(!$onlyAggFuncFlag) {
-					$where = substr($where, 0, strlen($where)-1);
-				} else {
-					$where = substr($where, 0, strlen($where)-8);
-				}
-				
-				if($groupBy != '' && !$onlyAggFuncFlag) {	
-					$where.=', '.$tblPrefix.$groupBy;
-				}
-			}
-			
-			if($onlyAggFuncFlag == true && $groupBy == '') {
-				$where = substr($where, 0, strlen($where)-8);
-			}
-		}
 		
-		$tblPrefix = '';
-		if($orderBy != '' && get_magic_quotes_gpc() == true) { 
-			switch($orderBy) {
-				case 'single_group_project_id': $tblPrefix = 'project_group_list_vw.';
-				break;
-				case 'project_name': $tblPrefix = 'project_group_list_vw.';
-				break;
-				case 'description': $tblPrefix = 'project_group_list_vw.';
-				default: $tblPrefix = 'project_task_vw.';
-				break;
-			}
-			/* $countParams++;
-			$where.= ' ORDER BY $'.$countParams; 
-			array_push($params, $orderBy);
-			
-			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($orderBy === 'single_group_project_id') {
-				$orderBy = 'group_project_id';
-			}
-			
-			$where.= ' ORDER BY '.$tblPrefix.$orderBy; 
-		}
-			
-		if($groupBy == '' && $orderBy != '') {
-			if($asc === 0) { 
-				$where.= ' ASC'; 
-			} else { 
-				$where.=' DESC'; 
-			}
-		}
-
 		$res = db_query_params($arrMergedQuerysAndParams[0], $arrMergedQuerysAndParams[1]);
-
-		if(!$res || db_numrows($res) === 0) {
-		 	
+		
+		$idInParam = count($arrMergedQuerysAndParams[1]);
+		$paramId = $arrMergedQuerysAndParams[1][$idInParam-1];
+		
+		if($paramId != '' && ($paramId == null || !$res || db_numrows($res) == 0)) {
 		 	$error = db_error();
+			
 		 	if(trim($error)!='') {
 		 		$this->setError(true);
 		 		$this->setErrorString($error);
@@ -1785,20 +2044,21 @@
 		 	
 		 	return false;
 		}
-		
+	
 		$result = '';
 		$k = 0;
 		$o = 0;
 		$hours = 0;
+		
 		while ($arr = db_fetch_array($res)) {
 			
 			if($selectAllFlag) {
 				$countFields = (count($arr) / 2);
-			} 
-			
-			for($j=0; $j<$countFields; $j++) {	
+			}
+
+			for($j=0; $j<$countFields; $j++) {
 				
-				foreach($groupInformation as $groupInformationParts) {
+				foreach($groupInformation as $groupInformationParts) { //IN this example there are 6 values that can be grouped to 4 values, but only the sql values can be grouped to 2.
 					foreach($groupInformationParts as $infoParts) {
 						if($infoParts[0] == $arr[0]) {
 							$hours = $infoParts[1];
@@ -1818,7 +2078,7 @@
 					$result .= $date;
 
 				} elseif($doneHoursPos-1 == $j) { 
-
+					
 					if($projectTaskIdChoosen == true) {
 						
 						$projectHour = $hours;
@@ -1898,7 +2158,7 @@
 		}
 		
 		$result = substr($result, 0, strlen($result)-8);
-		
+
 		return $result;
 	} 
 

Modified: branches/papel-reporting/www/pm/reporting/taskCreateReportGui.php
===================================================================
--- branches/papel-reporting/www/pm/reporting/taskCreateReportGui.php	2011-01-12 09:58:07 UTC (rev 7141)
+++ branches/papel-reporting/www/pm/reporting/taskCreateReportGui.php	2011-01-12 10:29:08 UTC (rev 7142)
@@ -628,24 +628,24 @@
 	<div class="reportGuiFieldsDiv">
 		<div class="reportGuiFieldsDivLeft reportGuiFieldsDivLeftColor">
 			<div class="reportGuiCheckboxDivLeft reportGuiCheckboxDivLeftPlus">
-				<input type="checkbox" name="hours" value="1" <?php if($selectRequest['hours']) echo 'checked="checked"'; ?> />
+				<input type="checkbox" name="priority" value="1" <?php if($selectRequest['priority']) echo 'checked="checked"'; ?> />
 			</div>
 			<div class="reportGuiCheckboxTxtDiv">
-				 <?php echo _('Hours') ?>
+				 <?php echo _('Priority') ?>
 			</div>
 		</div>
 		<div class="reportGuiFieldsDivRight reportGuiFieldsDivRightColor">
 			<div class="reportGuiCheckboxDivRight">
-				<input type="checkbox" name="hours_max" value="1" <?php if($selectRequest['hours_max']) echo 'checked="checked"'; ?> />
+				<input type="checkbox" name="priority_max" value="1" <?php if($selectRequest['priority_max']) echo 'checked="checked"'; ?> />
 			</div>
 			<div class="reportGuiCheckboxDivRight">
-				<input type="checkbox" name="hours_min" value="1" <?php if($selectRequest['hours_min']) echo 'checked="checked"'; ?> />
+				<input type="checkbox" name="priority_min" value="1" <?php if($selectRequest['priority_min']) echo 'checked="checked"'; ?> />
 			</div>
 			<div class="reportGuiCheckboxDivRight">
-				<input type="checkbox" name="hours_avg" value="1" <?php if($selectRequest['hours_avg']) echo 'checked="checked"'; ?> />
+				<input type="checkbox" name="priority_avg" value="1" <?php if($selectRequest['priority_avg']) echo 'checked="checked"'; ?> />
 			</div>
 			<div class="reportGuiCheckboxDivRight">
-				<input type="checkbox" name="hours_sum" value="1" <?php if($selectRequest['hours_sum']) echo 'checked="checked"'; ?> />
+				 
 			</div>
 			<div class="reportGuiCheckboxDivRight">
 				 
@@ -656,52 +656,51 @@
 	<div class="reportGuiFieldsDiv">
 		<div class="reportGuiFieldsDivLeft reportGuiFieldsDivLeftColor">
 			<div class="reportGuiCheckboxDivLeft reportGuiCheckboxDivLeftPlus">
-				<input type="checkbox" name="hours_done" value="1" <?php if($selectRequest['hours_done']) echo 'checked="checked"'; if($objReportingInfo->isConnectionRefusedInfo()) echo 'disabled="disabled"'; ?> />
+				<input type="checkbox" name="percent_complete" value="1" <?php if($selectRequest['percent_complete']) echo 'checked="checked"'; ?> />
+			</div>	
+			<div class="reportGuiCheckboxTxtDiv">
+				 <?php echo _('Percent complete') ?>
 			</div>
-			<div class="reportGuiCheckboxTxtDiv" <?php if($objReportingInfo->isConnectionRefusedInfo()) echo 'style="color:#8a8a8a"' ?>>
-				 <?php echo _('Hours done') ?>
-			</div>
 		</div>
-		<div class="reportGuiFieldsDivRight reportGuiFieldsDivRightColor">	
+		<div class="reportGuiFieldsDivRight reportGuiFieldsDivRightColor">
 			<div class="reportGuiCheckboxDivRight">
-				<input type="checkbox" name="hours_done_max" value="1" <?php if($selectRequest['hours_done_max']) echo 'checked="checked"'; if($objReportingInfo->isConnectionRefusedInfo()) echo 'disabled="disabled"'; ?> />
+				<input type="checkbox" name="percent_complete_max" value="1" <?php if($selectRequest['percent_complete_max']) echo 'checked="checked"'; ?> />
 			</div>
 			<div class="reportGuiCheckboxDivRight">
-				<input type="checkbox" name="hours_done_min" value="1" <?php if($selectRequest['hours_done_min']) echo 'checked="checked"'; if($objReportingInfo->isConnectionRefusedInfo()) echo 'disabled="disabled"'; ?> />
+				<input type="checkbox" name="percent_complete_min" value="1" <?php if($selectRequest['percent_complete_min']) echo 'checked="checked"'; ?> />
 			</div>
 			<div class="reportGuiCheckboxDivRight">
-				<input type="checkbox" name="hours_done_avg" value="1" <?php if($selectRequest['hours_done_avg']) echo 'checked="checked"'; if($objReportingInfo->isConnectionRefusedInfo()) echo 'disabled="disabled"'; ?> />
+				<input type="checkbox" name="percent_complete_avg" value="1" <?php if($selectRequest['percent_complete_avg']) echo 'checked="checked"'; ?> />
 			</div>
 			<div class="reportGuiCheckboxDivRight">
-				<input type="checkbox" name="hours_done_sum" value="1" <?php if($selectRequest['hours_done_sum']) echo 'checked="checked"'; if($objReportingInfo->isConnectionRefusedInfo()) echo 'disabled="disabled"'; ?> />
+				<input type="checkbox" name="percent_complete_sum" value="1" <?php if($selectRequest['percent_complete_sum']) echo 'checked="checked"'; ?> />
 			</div>
 			<div class="reportGuiCheckboxDivRight">
 				 
 			</div>
 		</div>
 	</div>
-		<br class="clearFloat" />
 	<div class="reportGuiFieldsDiv">
 		<div class="reportGuiFieldsDivLeft reportGuiFieldsDivLeftColor">
 			<div class="reportGuiCheckboxDivLeft reportGuiCheckboxDivLeftPlus">
-				<input type="checkbox" name="priority" value="1" <?php if($selectRequest['priority']) echo 'checked="checked"'; ?> />
+				<input type="checkbox" name="hours" value="1" <?php if($selectRequest['hours']) echo 'checked="checked"'; ?> />
 			</div>
 			<div class="reportGuiCheckboxTxtDiv">
-				 <?php echo _('Priority') ?>
+				 <?php echo _('Hours') ?>
 			</div>
 		</div>
 		<div class="reportGuiFieldsDivRight reportGuiFieldsDivRightColor">
 			<div class="reportGuiCheckboxDivRight">
-				<input type="checkbox" name="priority_max" value="1" <?php if($selectRequest['priority_max']) echo 'checked="checked"'; ?> />
+				<input type="checkbox" name="hours_max" value="1" <?php if($selectRequest['hours_max']) echo 'checked="checked"'; ?> />
 			</div>
 			<div class="reportGuiCheckboxDivRight">
-				<input type="checkbox" name="priority_min" value="1" <?php if($selectRequest['priority_min']) echo 'checked="checked"'; ?> />
+				<input type="checkbox" name="hours_min" value="1" <?php if($selectRequest['hours_min']) echo 'checked="checked"'; ?> />
 			</div>
 			<div class="reportGuiCheckboxDivRight">
-				<input type="checkbox" name="priority_avg" value="1" <?php if($selectRequest['priority_avg']) echo 'checked="checked"'; ?> />
+				<input type="checkbox" name="hours_avg" value="1" <?php if($selectRequest['hours_avg']) echo 'checked="checked"'; ?> />
 			</div>
 			<div class="reportGuiCheckboxDivRight">
-				 
+				<input type="checkbox" name="hours_sum" value="1" <?php if($selectRequest['hours_sum']) echo 'checked="checked"'; ?> />
 			</div>
 			<div class="reportGuiCheckboxDivRight">
 				 
@@ -712,24 +711,24 @@
 	<div class="reportGuiFieldsDiv">
 		<div class="reportGuiFieldsDivLeft reportGuiFieldsDivLeftColor">
 			<div class="reportGuiCheckboxDivLeft reportGuiCheckboxDivLeftPlus">
-				<input type="checkbox" name="percent_complete" value="1" <?php if($selectRequest['percent_complete']) echo 'checked="checked"'; ?> />
-			</div>	
-			<div class="reportGuiCheckboxTxtDiv">
-				 <?php echo _('Percent complete') ?>
+				<input type="checkbox" name="hours_done" value="1" <?php if($selectRequest['hours_done']) echo 'checked="checked"'; if($objReportingInfo->isConnectionRefusedInfo()) echo 'disabled="disabled"'; ?> />
 			</div>
+			<div class="reportGuiCheckboxTxtDiv" <?php if($objReportingInfo->isConnectionRefusedInfo()) echo 'style="color:#8a8a8a"' ?>>
+				 <?php echo _('Hours done') ?>
+			</div>
 		</div>
-		<div class="reportGuiFieldsDivRight reportGuiFieldsDivRightColor">
+		<div class="reportGuiFieldsDivRight reportGuiFieldsDivRightColor">	
 			<div class="reportGuiCheckboxDivRight">
-				<input type="checkbox" name="percent_complete_max" value="1" <?php if($selectRequest['percent_complete_max']) echo 'checked="checked"'; ?> />
+				<input type="checkbox" name="hours_done_max" value="1" <?php if($selectRequest['hours_done_max']) echo 'checked="checked"'; if($objReportingInfo->isConnectionRefusedInfo()) echo 'disabled="disabled"'; ?> />
 			</div>
 			<div class="reportGuiCheckboxDivRight">
-				<input type="checkbox" name="percent_complete_min" value="1" <?php if($selectRequest['percent_complete_min']) echo 'checked="checked"'; ?> />
+				<input type="checkbox" name="hours_done_min" value="1" <?php if($selectRequest['hours_done_min']) echo 'checked="checked"'; if($objReportingInfo->isConnectionRefusedInfo()) echo 'disabled="disabled"'; ?> />
 			</div>
 			<div class="reportGuiCheckboxDivRight">
-				<input type="checkbox" name="percent_complete_avg" value="1" <?php if($selectRequest['percent_complete_avg']) echo 'checked="checked"'; ?> />
+				<input type="checkbox" name="hours_done_avg" value="1" <?php if($selectRequest['hours_done_avg']) echo 'checked="checked"'; if($objReportingInfo->isConnectionRefusedInfo()) echo 'disabled="disabled"'; ?> />
 			</div>
 			<div class="reportGuiCheckboxDivRight">
-				<input type="checkbox" name="percent_complete_sum" value="1" <?php if($selectRequest['percent_complete_sum']) echo 'checked="checked"'; ?> />
+				<input type="checkbox" name="hours_done_sum" value="1" <?php if($selectRequest['hours_done_sum']) echo 'checked="checked"'; if($objReportingInfo->isConnectionRefusedInfo()) echo 'disabled="disabled"'; ?> />
 			</div>
 			<div class="reportGuiCheckboxDivRight">
 				 
@@ -959,7 +958,6 @@
 						<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="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 +1000,6 @@
 					<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="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>



More information about the evolvis-commits mailing list