Skip to content

Commit 18920bb

Browse files
committed
Merge pull request #14 from PHPOffice/develop
Version 0.2.0
2 parents 718c0d7 + 8ca187e commit 18920bb

17 files changed

+928
-172
lines changed

CHANGELOG.md

+10-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
# Changelog
22

3+
## 0.2.0 - 2014-08-13
4+
### Features
5+
- MSProjectExchange Reader - @Progi1984 GH-4
6+
- MSProjectExchange Writer - @Progi1984 GH-2
7+
8+
### Miscellaneous
9+
- Refactored resources management - @Progi1984
10+
11+
312
## 0.1.0 - 2014-08-08
413

514
### Features
@@ -8,8 +17,6 @@
817
- GanttProject Writer - @Progi1984 GH-1
918
- GanttProject Reader - @Progi1984 GH-3
1019

11-
### Bugfix
12-
1320
### Miscellaneous
1421
- QA : Documentation - @Progi1984 GH-8 GH-12
15-
- QA : Unit Tests - @Progi1984 GH-12
22+
- QA : Unit Tests - @Progi1984 GH-12

docs/intro.rst

+10-6
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,13 @@ Writers
4141
+---------------------------+----------------------+--------+-------+
4242
| | Custom | | |
4343
+---------------------------+----------------------+--------+-------+
44-
| **Project** | Task | | |
44+
| **Document Informations** | | | |
4545
+---------------------------+----------------------+--------+-------+
46-
| | Resource | ||
46+
| **Project** | Task | ||
4747
+---------------------------+----------------------+--------+-------+
48-
| | Allocation | ||
48+
| | Resource |||
49+
+---------------------------+----------------------+--------+-------+
50+
| | Allocation |||
4951
+---------------------------+----------------------+--------+-------+
5052

5153
Readers
@@ -57,11 +59,13 @@ Readers
5759
+---------------------------+----------------------+--------+-------+
5860
| | Custom | | |
5961
+---------------------------+----------------------+--------+-------+
60-
| **Project** | Task | | |
62+
| **Document Informations** | || |
63+
+---------------------------+----------------------+--------+-------+
64+
| **Project** | Task |||
6165
+---------------------------+----------------------+--------+-------+
62-
| | Resource | | |
66+
| | Resource | | |
6367
+---------------------------+----------------------+--------+-------+
64-
| | Allocation | | |
68+
| | Allocation | | |
6569
+---------------------------+----------------------+--------+-------+
6670

6771
Contributing

docs/references.rst

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
References
44
==========
55

6-
GanttProject
6+
GanttProject (GAN)
77
---------------------
88

99
- `Website <http://ganttproject.biz>`__
1010

11-
MSProjectExchange
11+
MSProjectExchange (MPX)
1212
---------------------
1313

1414
- `MSDN : Description of the MPX Project File Exchange Format <http://support.microsoft.com/kb/270139>`__

samples/Sample_01_Simple.php

+6-6
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,9 @@
3535
$objTask1->setEndDate('03-01-2012');
3636
$objTask1->setProgress(0.5);
3737
$objTask1->addResource($objRes1);
38-
$objTask1Res = $objTask1->getResources();
3938
echo 'Resources "Start of the project"'.EOL;
40-
foreach ($objTask1Res as $res){
41-
echo ' > '.$objPHPProject->getResource($res)->getTitle().EOL;;
39+
foreach ($objTask1->getResources() as $oResource){
40+
echo ' > '.$oResource->getTitle().EOL;
4241
}
4342

4443
$objTask2 = $objPHPProject->createTask();
@@ -51,10 +50,11 @@
5150
$objTask21->setProgress(1);
5251
$objTask21->addResource($objRes2);
5352
$objTask21->addResource($objRes1);
54-
$objTask21Res = $objTask21->getResources();
53+
$objTask21->addResource($objRes1);
54+
5555
echo 'Resources "Analysis Code"'.EOL;
56-
foreach ($objTask21Res as $res){
57-
echo ' > '.$objPHPProject->getResource($res)->getTitle().EOL;;
56+
foreach ($objTask21->getResources() as $oResource){
57+
echo ' > '.$oResource->getTitle().EOL;;
5858
}
5959

6060
$objTask22 = $objTask2->createTask();

samples/Sample_02_ReadGanttProject.php

+4-34
Original file line numberDiff line numberDiff line change
@@ -27,46 +27,16 @@
2727

2828
// Ressources
2929
echo date('H:i:s') . ' Get ressources'.EOL;
30-
$oResources = $objPHPProject->getAllResources();
31-
foreach ($oResources as $item){
32-
echo 'Resource : '.$item->getTitle().EOL;
30+
foreach ($objPHPProject->getAllResources() as $oResource){
31+
echo 'Resource : '.$oResource->getTitle().EOL;
3332
}
3433
echo EOL;
3534

3635
// Tasks
3736
echo date('H:i:s') . ' Get tasks'.EOL;
38-
$oTasks = $objPHPProject->getAllTasks();
39-
foreach ($oTasks as $item){
40-
echo 'Task : '.$item->getName().EOL;
41-
echo ' >> Duration : '.$item->getDuration().EOL;
42-
echo ' >> StartDate : '.date('Y-m-d', $item->getStartDate()).EOL;
43-
echo ' >> Progress : '.$item->getProgress().EOL;
44-
echo ' >> Resources : '.EOL;
45-
$oTaskResources = $item->getResources();
46-
if(!empty($oTaskResources)){
47-
foreach ($oTaskResources as $itemRes){
48-
echo ' >>>> Resource : '.$objPHPProject->getResource($itemRes)->getTitle().EOL;
49-
}
50-
}
51-
52-
echo ' >> SubTasks : '.EOL;
53-
if($item->getTaskCount() > 0){
54-
foreach ($item->getTasks() as $itemSub){
55-
echo ' >>>> Task : '.$itemSub->getName().EOL;
56-
echo ' >>>>>> Duration : '.$itemSub->getDuration().EOL;
57-
echo ' >>>>>> StartDate : '.date('Y-m-d', $itemSub->getStartDate()).EOL;
58-
echo ' >>>>>> Progress : '.$itemSub->getProgress().EOL;
59-
echo ' >>>>>> Resources : '.EOL;
60-
$oTaskResources = $itemSub->getResources();
61-
if(!empty($oTaskResources)){
62-
foreach ($oTaskResources as $itemRes){
63-
echo ' >>>>>>>> Resource : '.$objPHPProject->getResource($itemRes)->getTitle().EOL;
64-
}
65-
}
66-
}
67-
}
37+
foreach ($objPHPProject->getAllTasks() as $oTask){
38+
echoTask($objPHPProject, $oTask);
6839
}
69-
echo EOL;
7040

7141
// Echo done
7242
echo date('H:i:s') . ' Done reading file.'.EOL;

samples/Sample_02_ReadMSProjectExchange.php

+15-45
Original file line numberDiff line numberDiff line change
@@ -7,69 +7,39 @@
77

88
// Create new PHPProject object
99
echo date('H:i:s') . ' Create new PHPProject object'.EOL;
10-
$objReader = IOFactory::createReader('MSProjectExchange');
11-
$objPHPProject = $objReader->load('02file.mpx');
10+
$objReader = IOFactory::createReader('MsProjectMPX');
11+
$objPHPProject = $objReader->load(__DIR__ .DIRECTORY_SEPARATOR.'resources'.DIRECTORY_SEPARATOR.'Sample_02.mpx');
1212

1313
// Set properties
14-
echo date('H:i:s') . ' Set properties'.EOL;
15-
echo 'Creator >'.$objPHPProject->getProperties()->getCreator().EOL;
16-
echo 'LastModifiedBy >'.$objPHPProject->getProperties()->getLastModifiedBy().EOL;
17-
echo 'Title >'.$objPHPProject->getProperties()->getTitle().EOL;
18-
echo 'Subject >'.$objPHPProject->getProperties()->getSubject().EOL;
19-
echo 'Description >'.$objPHPProject->getProperties()->getDescription().EOL;
14+
echo date('H:i:s') . ' Get properties'.EOL;
15+
echo 'Creator > '.$objPHPProject->getProperties()->getCreator().EOL;
16+
echo 'LastModifiedBy > '.$objPHPProject->getProperties()->getLastModifiedBy().EOL;
17+
echo 'Title > '.$objPHPProject->getProperties()->getTitle().EOL;
18+
echo 'Subject > '.$objPHPProject->getProperties()->getSubject().EOL;
19+
echo 'Description > '.$objPHPProject->getProperties()->getDescription().EOL;
2020
echo EOL;
2121

2222
// Add some data
2323
echo date('H:i:s') . ' Get some data'.EOL;
24-
echo 'StartDate >'.$objPHPProject->getInformations()->getStartDate().EOL;
25-
echo 'EndDate >'.$objPHPProject->getInformations()->getEndDate().EOL;
24+
echo 'StartDate > '.$objPHPProject->getInformations()->getStartDate().EOL;
25+
echo 'EndDate > '.$objPHPProject->getInformations()->getEndDate().EOL;
2626
echo EOL;
2727

2828
// Ressources
2929
echo date('H:i:s') . ' Get ressources'.EOL;
3030
$oResources = $objPHPProject->getAllResources();
3131
foreach ($oResources as $item){
32-
echo 'Resource :'.$item->getTitle().EOL;
32+
echo 'Resource : '.$item->getTitle().EOL;
3333
}
3434
echo EOL;
3535

3636
// Tasks
3737
echo date('H:i:s') . ' Get tasks'.EOL;
38-
$oTasks = $objPHPProject->getAllTasks();
39-
foreach ($oTasks as $item){
40-
echo 'Task :'.$item->getName().EOL;
41-
echo ' >> Duration :'.$item->getDuration().EOL;
42-
echo ' >> StartDate :'.$item->getStartDate().EOL;
43-
echo ' >> EndDate :'.$item->getEndDate().EOL;
44-
echo ' >> Progress :'.$item->getProgress().EOL;
45-
echo ' >> Resources :'.EOL;
46-
$oTaskResources = $item->getResources();
47-
if(!empty($oTaskResources)){
48-
foreach ($oTaskResources as $itemRes){
49-
echo ' >>>> Resource :'.$objPHPProject->getResource($itemRes)->getTitle().EOL;
50-
}
51-
}
52-
53-
echo ' >> SubTasks :'.EOL;
54-
$oSubTasks = $item->getTasks();
55-
if(!empty($oSubTasks)){
56-
foreach ($oSubTasks as $itemSub){
57-
echo ' >>>> Task :'.$itemSub->getName().EOL;
58-
echo ' >>>>>> Duration :'.$itemSub->getDuration().EOL;
59-
echo ' >>>>>> StartDate :'.$itemSub->getStartDate().EOL;
60-
echo ' >>>>>> EndDate :'.$itemSub->getEndDate().EOL;
61-
echo ' >>>>>> Progress :'.$itemSub->getProgress().EOL;
62-
echo ' >>>>>> Resources :'.EOL;
63-
$oTaskResources = $itemSub->getResources();
64-
if(!empty($oTaskResources)){
65-
foreach ($oTaskResources as $itemRes){
66-
echo ' >>>>>>>> Resource :'.$objPHPProject->getResource($itemRes)->getTitle().EOL;
67-
}
68-
}
69-
}
70-
}
38+
$arrTasks = $objPHPProject->getAllTasks();
39+
40+
foreach ($arrTasks as $oTask){
41+
echoTask($objPHPProject, $oTask);
7142
}
72-
echo EOL;
7343

7444
// Echo done
7545
echo date('H:i:s') . ' Done reading file.'.EOL;

samples/Sample_Header.php

+23-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
Autoloader::register();
1616

1717
// Set writers
18-
$writers = array('GanttProject' => 'gan'/*, 'MSProjectExchange' => 'mpx'*/);
18+
$writers = array('GanttProject' => 'gan', 'MsProjectMPX' => 'mpx');
1919

2020
// Return to the caller script when runs by CLI
2121
if (CLI) {
@@ -107,6 +107,28 @@ function getEndingNotes($writers)
107107
return $result;
108108
}
109109

110+
function echoTask($oPHPProject, $oTask, $level = 0) {
111+
echo '<strong>'.str_repeat('>', 2 * $level).' Task : '.$oTask->getName().'</strong>'.EOL;
112+
echo ' '.str_repeat('>', 2 * ($level + 1)).' Duration : '.$oTask->getDuration().EOL;
113+
echo ' '.str_repeat('>', 2 * ($level + 1)).' StartDate : '.date('Y-m-d', $oTask->getStartDate()).EOL;
114+
echo ' '.str_repeat('>', 2 * ($level + 1)).' Progress : '.$oTask->getProgress().EOL;
115+
echo ' '.str_repeat('>', 2 * ($level + 1)).' Resources : '.EOL;
116+
$oTaskResources = $oTask->getResources();
117+
if(!empty($oTaskResources)){
118+
foreach ($oTaskResources as $oResource){
119+
echo ' '.str_repeat('>', 2 * ($level + 2)).' Resource : '.$oResource->getTitle().EOL;
120+
}
121+
}
122+
echo EOL;
123+
$level++;
124+
if($oTask->getTaskCount() > 0){
125+
foreach ($oTask->getTasks() as $oSubTask){
126+
echoTask($oPHPProject, $oSubTask, $level);
127+
}
128+
}
129+
$level--;
130+
}
131+
110132
?>
111133
<title><?php echo $pageTitle; ?></title>
112134
<meta charset="utf-8">

samples/resources/Sample_02.mpx

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
MPX;Microsoft Project for Windows;4.0;ANSI
2+
10;$;1;2;.;,
3+
11;2;0;1;8,00;40,00;$10,00/h;$15,00/h;1;0
4+
12;1;0;480;/;:;AM;PM;20;0
5+
20;Standard;0;1;1;1;1;1;0
6+
25;1
7+
25;2;08:00 AM;12:00 PM;01:00 PM;05:00 PM
8+
25;3;08:00 AM;12:00 PM;01:00 PM;05:00 PM
9+
25;4;08:00 AM;12:00 PM;01:00 PM;05:00 PM
10+
25;5;08:00 AM;12:00 PM;01:00 PM;05:00 PM
11+
25;6;08:00 AM;12:00 PM;01:00 PM;05:00 PM
12+
25;7
13+
30;Project1;;;Standard;01/01/2003;;0;05/12/2003;;$0,00;$0,00;$0,00;0h;0h;0h;0%;0d;0d;0d;0%;;;;;0d;0d
14+
40;Name;ID;Max Units;Unique ID
15+
41;1;40;41;49
16+
50;Resource1;1;;1
17+
50;Resource2;2;0,5;2
18+
60;Name;WBS;Outline Level;Duration;% Complete;Start;Actual Start;Predecessors;Fixed;ID;Constraint Type;Unique ID;Outline Number;Summary
19+
61;1;2;3;40;44;50;58;70;80;90;91;98;99;120
20+
70;Summary Task;1.0;1;;;;;;No;1;As Soon As Possible;1;1.0;Yes
21+
70;First Sub Task;1.1;2;10,5d;55,5%;01/01/2003;01/01/2003;;No;2;As Soon As Possible;2;1.1
22+
75;1;1;80h;;40h;;;;;;;;1
23+
76;;0;0;NA;NA
24+
70;Second Sub Task;1.2;2;10d;;11/01/2003;;2;No;3;As Soon As Possible;3;1.2
25+
75;2;1;10d;;;;;;;;;;2
26+
76;;0;0;NA;NA
27+
70;Milestone;1.3;2;0d;;21/01/2003;;3;No;4;As Soon As Possible;4;1.3

src/PhpProject/PhpProject.php

+2-34
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ public function setProperties(DocumentProperties $pValue)
109109
/**
110110
* Get informations
111111
*
112-
* @return PHPProject_DocumentInformations
112+
* @return DocumentInformations
113113
*/
114114
public function getInformations()
115115
{
@@ -168,7 +168,7 @@ public function getAllResources()
168168
/**
169169
* Get active resource
170170
*
171-
* @return Resource
171+
* @return Resource|null
172172
*/
173173
public function getActiveResource()
174174
{
@@ -178,22 +178,6 @@ public function getActiveResource()
178178
return null;
179179
}
180180

181-
/**
182-
* Get resource by index
183-
*
184-
* @param int $pIndex Resource index
185-
* @return Resource
186-
* @throws \Exception
187-
*/
188-
public function getResource($pIndex = 0)
189-
{
190-
if (!isset($this->resourceCollection[$pIndex])) {
191-
throw new \Exception('Resource index is out of bounds.');
192-
} else {
193-
return $this->resourceCollection[$pIndex];
194-
}
195-
}
196-
197181
/**
198182
* Get resource from index
199183
*
@@ -260,22 +244,6 @@ public function getActiveTask()
260244
return null;
261245
}
262246

263-
/**
264-
* Get task by index
265-
*
266-
* @param int $pIndex Task index
267-
* @return Task
268-
* @throws \Exception
269-
*/
270-
public function getTask($pIndex = 0)
271-
{
272-
if (!isset($this->taskCollection[$pIndex])) {
273-
throw new \Exception('Task index is out of bounds.');
274-
} else {
275-
return $this->taskCollection[$pIndex];
276-
}
277-
}
278-
279247
/**
280248
* Get task from index
281249
*

0 commit comments

Comments
 (0)