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
|
<?php
namespace SMW\Importer;
/**
* @license GNU GPL v2+
* @since 3.0
*
* @author mwjames
*/
class ContentModeller {
/**
* @since 3.0
*
* @param string $fileDir
* @param array $fileContents
*
* @return ImportContents[]|[]
*/
public function makeContentList( $fileDir, array $fileContents ) {
$contents = [];
if ( !isset( $fileContents['import'] ) ) {
return $contents;
}
foreach ( $fileContents['import'] as $value ) {
$importContents = new ImportContents();
if ( isset( $value['namespace'] ) ) {
$importContents->setNamespace(
defined( $value['namespace'] ) ? constant( $value['namespace'] ) : 0
);
}
if ( isset( $value['page'] ) ) {
$importContents->setName( $value['page'] );
}
if ( isset( $value['description'] ) ) {
$importContents->setDescription( $value['description'] );
} elseif ( isset( $fileContents['description'] ) ) {
$importContents->setDescription( $fileContents['description'] );
} else {
$importContents->setDescription( 'No description' );
}
if ( isset( $fileContents['meta']['version'] ) ) {
$importContents->setVersion( $fileContents['meta']['version'] );
} else {
$importContents->setVersion( 0 );
}
if ( isset( $value['contents']['type'] ) && $value['contents']['type'] === 'xml' ) {
$contents[] = $this->newImportContents( $importContents, $fileDir, $value );
} else {
$contents[] = $this->newImportContents( $importContents, $fileDir, $value );
}
}
return $contents;
}
private function newImportContents( $importContents, $fileDir, $value ) {
$importContents->setContentType( ImportContents::CONTENT_TEXT );
if ( !isset( $value['contents'] ) || $value['contents'] === '' ) {
$importContents->addError( 'Missing, or has empty contents section' );
} else {
$this->setContents( $importContents, $fileDir, $value['contents'] );
}
if ( isset( $value['options'] ) ) {
$importContents->setOptions( $value['options'] );
}
return $importContents;
}
private function setContents( $importContents, $fileDir, $contents ) {
if ( !is_array( $contents ) || !isset( $contents['importFrom'] ) ) {
return $importContents->setContents( $contents );
}
$file = $this->normalizeFile( $fileDir, $contents['importFrom'] );
if ( !is_readable( $file ) ) {
return $importContents->addError( "File: " . $file . " wasn't accessible" );
}
$extension = pathinfo( $file, PATHINFO_EXTENSION );
if ( isset( $contents['type'] ) && $contents['type'] === 'xml' && $extension !== 'xml' ) {
return $importContents->addError( "XML: " . $file . " is not recognized as xml file extension" );
}
if ( $extension === 'xml' ) {
$importContents->setContentType( ImportContents::CONTENT_XML );
}
$importContents->setContentsFile( $file );
}
private function normalizeFile( $fileDir, $file ) {
return str_replace( [ '\\', '/' ], DIRECTORY_SEPARATOR, $fileDir . ( $file{0} === '/' ? '' : '/' ) . $file );
}
}
|