36
36
* $pkgxml->generate('package.xml');
37
37
*
38
38
*/
39
- class PackageConfigReader
39
+ class PackageConfigReader
40
+ implements LoggableInterface
41
+ {
42
+ public $ logger ;
43
+
44
+ function __construct ()
45
+ {
46
+ }
47
+
48
+ function setLogger ( \CLIFramework \Logger $ logger )
49
+ {
50
+ $ this ->logger = $ logger ;
51
+ }
52
+
53
+ function getLogger ()
54
+ {
55
+ return $ this ->logger ;
56
+ }
57
+
58
+ function __call ($ name ,$ arguments )
59
+ {
60
+ if ( $ this ->logger )
61
+ call_user_func_array ( array ($ this ->logger ,$ name ) , $ arguments );
62
+ }
63
+
64
+ function read ($ file )
65
+ {
66
+ $ logger = $ this ->getLogger ();
67
+ $ ini = null ;
68
+ try {
69
+ $ ini = parse_ini_file ( $ file , true );
70
+ }
71
+ catch ( Exception $ e ) {
72
+ throw new Exception ( "Package.ini: $ file syntax error: " . $ e ->getMessage () );
73
+ }
74
+
75
+ if ( ! $ ini )
76
+ throw new Exception ( "$ file is empty. " );
77
+
78
+ $ config = new ConfigContainer ( $ ini );
79
+
80
+ // preprocess, validate sections only for package.ini
81
+ $ pkginfo = new Package ;
82
+ $ pkginfo ->config = $ config ;
83
+
84
+ // validation
85
+ $ requiredFields = explode (' ' ,'package.name package.desc package.version ' );
86
+ foreach ( $ requiredFields as $ f ) {
87
+ if ( ! $ config ->has ( $ f ) )
88
+ throw new \Onion \Exception \InvalidConfigException ( "$ f is not defined. " );
89
+ }
90
+
91
+ if ( ! $ config ->has ('package.authors ' ) && ! $ config ->has ('package.author ' ) ) {
92
+ echo <<<EOT
93
+ Attribute 'author' or 'authors' is not defined.
94
+ Please define 'author' in your package.ini file:
95
+
96
+ [package]
97
+
98
+ EOT ;
99
+ throw new \Onion \Exception \InvalidConfigException ('package.author or package.authors is not defined. ' );
100
+ }
101
+
102
+
103
+ // set default values
104
+ if ( ! $ config ->has ('package.summary ' ) ) {
105
+ $ logger ->debug ("* summary is not defined., use the first paragraph from description by default. " ,1 );
106
+ $ descs = explode ("\n" ,$ config ->get ('package.desc ' ));
107
+ $ config ->set ('package.summary ' ,$ descs [0 ]); # use first line desc as summary by default.
108
+ }
109
+
110
+ if ( ! $ config ->has ('package.license ' ) ) {
111
+ $ logger ->debug ("* license is not defined., use PHP license by default. " ,1 );
112
+ $ config ->set ('package.license ' ,'PHP ' );
113
+ }
114
+
115
+ // build package meta info
116
+ $ pkginfo ->name = $ config ->get ('package.name ' );
117
+ $ pkginfo ->desc = $ config ->get ('package.desc ' );
118
+ $ pkginfo ->summary = $ config ->get ('package.summary ' );
119
+ $ pkginfo ->version = $ config ->get ('package.version ' );
120
+ $ pkginfo ->stability = $ config ->get ('package.stability ' );
121
+
122
+
123
+
124
+ return $ pkginfo ;
125
+ }
126
+
127
+ }
128
+
129
+ class PackageConfigReader2
40
130
{
41
131
public $ file ;
42
132
public $ config ;
@@ -101,12 +191,6 @@ function readAsPackageXml()
101
191
102
192
103
193
/* check optional attributes */
104
-
105
- if ( ! $ config ->has ('package.summary ' ) ) {
106
- $ descs = explode ("\n" ,$ config ->get ('package.desc ' ));
107
- $ config ->set ('package.summary ' ,$ descs [0 ]); # use first line desc as summary by default.
108
- }
109
-
110
194
if ( ! $ config ->has ('package.license ' ) ) {
111
195
$ logger ->info2 ("* license is not defined., use PHP license by default. " ,1 );
112
196
$ config ->set ('package.license ' ,'PHP LICENSE ' );
@@ -121,6 +205,11 @@ function readAsPackageXml()
121
205
* <license uri="http://www.opensource.org/licenses/bsd-license.php">BSD Style</license>
122
206
*/
123
207
208
+
209
+
210
+ /**
211
+ * package xml must have some default value
212
+ */
124
213
if ( ! $ config ->has ('package.channel ' ) ) {
125
214
$ logger ->info2 ("* package channel is not defined. use pear.php.net by default. " ,1 );
126
215
$ config ->set ('package.channel ' ,'pear.php.net ' );
0 commit comments