Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 56 |
|
0.00% |
0 / 2 |
CRAP | |
0.00% |
0 / 1 |
CargoGanttData | |
0.00% |
0 / 56 |
|
0.00% |
0 / 2 |
272 | |
0.00% |
0 / 1 |
getTableSchema | |
0.00% |
0 / 21 |
|
0.00% |
0 / 1 |
12 | |||
storeGanttValues | |
0.00% |
0 / 35 |
|
0.00% |
0 / 1 |
182 |
1 | <?php |
2 | |
3 | /** |
4 | * Static functions for dealing with the "_ganttData" table, which stores data |
5 | * produced by the Flex Diagrams extension. |
6 | * |
7 | * @author Yaron Koren |
8 | */ |
9 | class CargoGanttData { |
10 | |
11 | /** |
12 | * Set the schema. |
13 | */ |
14 | public static function getTableSchema() { |
15 | $fieldTypes = []; |
16 | $fieldTypes['_localID'] = [ 'String', false ]; |
17 | $fieldTypes['_name'] = [ 'String', false ]; |
18 | $fieldTypes['_startDate'] = [ 'Date', false ]; |
19 | $fieldTypes['_endDate'] = [ 'Date', false ]; |
20 | $fieldTypes['_progress'] = [ 'Float', false ]; |
21 | $fieldTypes['_parent'] = [ 'String', false ]; |
22 | $fieldTypes['_linksToBB'] = [ 'String', true ]; |
23 | $fieldTypes['_linksToBF'] = [ 'String', true ]; |
24 | $fieldTypes['_linksToFB'] = [ 'String', true ]; |
25 | $fieldTypes['_linksToFF'] = [ 'String', true ]; |
26 | |
27 | $tableSchema = new CargoTableSchema(); |
28 | foreach ( $fieldTypes as $field => $fieldVals ) { |
29 | [ $type, $isList ] = $fieldVals; |
30 | $fieldDesc = new CargoFieldDescription(); |
31 | $fieldDesc->mType = $type; |
32 | if ( $isList ) { |
33 | $fieldDesc->mIsList = true; |
34 | $fieldDesc->setDelimiter( '|' ); |
35 | } |
36 | $tableSchema->mFieldDescriptions[$field] = $fieldDesc; |
37 | } |
38 | |
39 | return $tableSchema; |
40 | } |
41 | |
42 | public static function storeGanttValues( $title, $createReplacement ) { |
43 | if ( $title == null ) { |
44 | return; |
45 | } |
46 | |
47 | $tableName = $createReplacement ? '_ganttData__NEXT' : '_ganttData'; |
48 | |
49 | // If this table does not exist, getTableSchemas() will |
50 | // throw an error. |
51 | try { |
52 | $tableSchemas = CargoUtils::getTableSchemas( [ $tableName ] ); |
53 | } catch ( MWException $e ) { |
54 | return; |
55 | } |
56 | |
57 | $revisionRecord = MediaWiki\MediaWikiServices::getInstance()->getRevisionLookup()->getRevisionByTitle( $title ); |
58 | $role = MediaWiki\Revision\SlotRecord::MAIN; |
59 | $pageText = $revisionRecord->getContent( $role )->getText(); |
60 | $data = json_decode( $pageText ); |
61 | |
62 | $allGanttValues = []; |
63 | foreach ( $data->data as $task ) { |
64 | $ganttValues = [ |
65 | '_localID' => $task->id, |
66 | '_name' => $task->text, |
67 | '_startDate' => $task->start_date, |
68 | '_endDate' => $task->end_date, |
69 | '_progress' => $task->progress |
70 | ]; |
71 | if ( $task->parent != 0 ) { |
72 | $ganttValues['_parent'] = $task->parent; |
73 | } |
74 | $allGanttValues[] = $ganttValues; |
75 | } |
76 | |
77 | foreach ( $data->links as $link ) { |
78 | $sourceID = $link->source; |
79 | foreach ( $allGanttValues as $i => $ganttValues ) { |
80 | if ( $ganttValues['_localID'] == $sourceID ) { |
81 | if ( $link->type == 0 ) { |
82 | $allGanttValues[$i]['_linksToBB'] = $link->target; |
83 | } elseif ( $link->type == 1 ) { |
84 | $allGanttValues[$i]['_linksToFF'] = $link->target; |
85 | } elseif ( $link->type == 2 ) { |
86 | $allGanttValues[$i]['_linksToFB'] = $link->target; |
87 | } else { // if ( $link->type == 3 ) { |
88 | $allGanttValues[$i]['_linksToBF'] = $link->target; |
89 | } |
90 | } |
91 | } |
92 | } |
93 | |
94 | foreach ( $allGanttValues as $ganttValues ) { |
95 | CargoStore::storeAllData( $title, $tableName, $ganttValues, $tableSchemas[$tableName] ); |
96 | } |
97 | } |
98 | |
99 | } |