-
-
Notifications
You must be signed in to change notification settings - Fork 219
/
SMW_DIHandler_WikiPage.php
145 lines (127 loc) 路 3.28 KB
/
SMW_DIHandler_WikiPage.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
<?php
use SMW\DIProperty;
use SMW\DIWikiPage;
/**
* @author Nischay Nahata
* @author Markus Kroetzsch
* @ingroup SMWDataItemsHandlers
*/
/**
* SMWDataItemHandler for dataitems of type SMWDIWikiPage.
*
* This handler is slightly different from other handlers since wikipages are
* stored in a separate table and referred to by numeric IDs. The handler thus
* returns IDs in most cases, but expects data from the SMW IDs table (with
* DBkey, namespace, interwiki, subobjectname) to be given for creating new
* dataitems. The store recognizes this special behavior from the field type
* 'p' that the handler reports for its only data field.
*
* @since 1.8
* @ingroup SMWDataItemsHandlers
*/
class SMWDIHandlerWikiPage extends SMWDataItemHandler {
/**
* @see SMWDataItemHandler::getTableFields()
* @since 1.8
* @return array
*/
public function getTableFields() {
return array( 'o_id' => 'p' );
}
/**
* @see SMWDataItemHandler::getFetchFields()
* @since 1.8
* @return array
*/
public function getFetchFields() {
return array( 'o_id' => 'p' );
}
/**
* @see SMWDataItemHandler::getTableIndexes()
* @since 1.8
* @return array
*/
public function getTableIndexes() {
return array( 'o_id' );
}
/**
* @see SMWDataItemHandler::getWhereConds()
* @since 1.8
* @param SMWDataItem $dataItem
* @return array
*/
public function getWhereConds( SMWDataItem $dataItem ) {
$oid = $this->store->smwIds->getSMWPageID(
$dataItem->getDBkey(),
$dataItem->getNamespace(),
$dataItem->getInterwiki(),
$dataItem->getSubobjectName()
);
return array( 'o_id' => $oid );
}
/**
* @see SMWDataItemHandler::getInsertValues()
* @since 1.8
* @param SMWDataItem $dataItem
* @return array
*/
public function getInsertValues( SMWDataItem $dataItem ) {
$oid = $this->store->smwIds->makeSMWPageID(
$dataItem->getDBkey(),
$dataItem->getNamespace(),
$dataItem->getInterwiki(),
$dataItem->getSubobjectName()
);
return array( 'o_id' => $oid );
}
/**
* @see SMWDataItemHandler::getIndexField()
* @since 1.8
* @return string
*/
public function getIndexField() {
return 'o_id';
}
/**
* @see SMWDataItemHandler::getLabelField()
* @since 1.8
* @return string
*/
public function getLabelField() {
return 'o_id';
}
/**
* @see SMWDataItemHandler::dataItemFromDBKeys()
* @since 1.8
* @param array|string $dbkeys expecting array here
* @throws SMWDataItemException
* @return SMWDataItem
*/
public function dataItemFromDBKeys( $dbkeys ) {
if ( is_array( $dbkeys ) && count( $dbkeys ) == 5 ) {
$namespace = intval( $dbkeys[1] );
if ( $namespace == SMW_NS_PROPERTY && $dbkeys[0] != '' &&
$dbkeys[0]{0} == '_' && $dbkeys[2] == '' ) {
// Correctly interpret internal property keys
$property = new DIProperty( $dbkeys[0] );
$wikipage = $property->getCanonicalDiWikiPage( $dbkeys[4] );
if ( !is_null( $wikipage ) ) {
return $wikipage;
}
} else {
return $this->newDiWikiPage( $dbkeys );
}
}
throw new SMWDataItemException( 'Failed to create data item from DB keys.' );
}
private function newDiWikiPage( $dbkeys ) {
$diWikiPage = new DIWikiPage(
$dbkeys[0],
intval( $dbkeys[1] ),
$dbkeys[2],
$dbkeys[4]
);
$diWikiPage->setSortKey( $dbkeys[3] );
return $diWikiPage;
}
}