@@ -94,25 +94,14 @@ public function create(array $params = array())
9494 array ($ this , 'isNotNull ' )
9595 );
9696
97- if (
97+ if (
9898 !isset ($ params ['name ' ])
9999 || !isset ($ params ['identifier ' ])
100100 ) {
101101 throw new \Exception ('Missing mandatory parameters ' );
102102 }
103103
104- $ xml = new SimpleXMLElement ('<?xml version="1.0"?><project></project> ' );
105- foreach ($ params as $ k => $ v ) {
106- if ('tracker_ids ' == $ k && is_array ($ v )) {
107- $ trackers = $ xml ->addChild ('tracker_ids ' , '' );
108- $ trackers ->addAttribute ('type ' , 'array ' );
109- foreach ($ v as $ id ) {
110- $ trackers ->addChild ('tracker ' , $ id );
111- }
112- } else {
113- $ xml ->addChild ($ k , $ v );
114- }
115- }
104+ $ xml = $ this ->prepareParamsXml ($ params );
116105
117106 return $ this ->post ('/projects.xml ' , $ xml ->asXML ());
118107 }
@@ -135,12 +124,40 @@ public function update($id, array $params)
135124 );
136125 $ params = array_filter (array_merge ($ defaults , $ params ));
137126
127+ $ xml = $ this ->prepareParamsXml ($ params );
128+
129+ return $ this ->put ('/projects/ ' .$ id .'.xml ' , $ xml ->asXML ());
130+ }
131+
132+ /**
133+ *
134+ * @param array $params
135+ * @return \Redmine\Api\SimpleXMLElement
136+ */
137+ protected function prepareParamsXml ($ params )
138+ {
139+ $ array_params = array (
140+ 'tracker_ids ' , 'issue_custom_field_ids ' ,
141+ );
142+ $ array_params_elements = array (
143+ 'tracker_ids ' => 'tracker ' ,
144+ 'issue_custom_field_ids ' => 'issue_custom_field ' ,
145+ );
146+
138147 $ xml = new SimpleXMLElement ('<?xml version="1.0"?><project></project> ' );
139148 foreach ($ params as $ k => $ v ) {
140- $ xml ->addChild ($ k , $ v );
149+ if (in_array ($ k , $ array_params ) && is_array ($ v )) {
150+ $ array = $ xml ->addChild ($ k , '' );
151+ $ array ->addAttribute ('type ' , 'array ' );
152+ foreach ($ v as $ id ) {
153+ $ array ->addChild ($ array_params_elements [$ k ], $ id );
154+ }
155+ } else {
156+ $ xml ->addChild ($ k , $ v );
157+ }
141158 }
142159
143- return $ this -> put ( ' /projects/ ' . $ id . ' . xml' , $ xml -> asXML ()) ;
160+ return $ xml ;
144161 }
145162
146163 /**
0 commit comments