@@ -77,20 +77,103 @@ public function add_release( $plugin, $release ) {
7777 // Make sure we don't accidentally add junk from a sandbox while tinkering.
7878 die ( "Not yet ready for use " );
7979
80+ $ release_date = date ( 'Y-m-d H:i:s ' , strtotime ( $ tag ['date ' ] ) );
81+ $ committer_user_id = get_user_by ( 'login ' , $ tag ['author ' ] )->ID ;
82+ if ( ! $ committer_user_id ) {
83+ return new WP_Error ( 'invalid_committer ' , 'Invalid committer ' );
84+ }
85+
8086 $ release_id = wp_insert_post ( array (
8187 'post_type ' => 'plugin_release ' ,
8288 'post_title ' => $ release ['version ' ],
8389 'post_parent ' => $ plugin_id ,
8490 'post_status ' => 'publish ' ,
91+ 'post_date ' => $ release_date , // And/or post_date_gmt?
92+ // Mirrors the metadata.
93+ 'meta_input ' => array (
94+ 'release_date ' => $ release ['date ' ],
95+ 'release_tag ' => $ release ['tag ' ],
96+ 'release_version ' => $ release ['version ' ],
97+ 'release_committer ' => $ release ['committer ' ],
98+ 'release_zips_built ' => $ release ['zips_built ' ],
99+ 'release_confirmations_required ' => $ release ['confirmations_required ' ],
100+ ),
101+ // TODO: what else? Could store the changelog or other content at the point of release for comparison purposes.
85102 ) );
86103
87- if ( $ release_id ) {
88- update_post_meta ( $ release_id , 'release_svn_revision ' , $ release ['revision ' ] );
104+ return $ release_id ;
105+ }
106+
107+ /**
108+ * Update existing release info.
109+ */
110+ public function update_release ( $ release_id , $ release ) {
111+ // Make sure we don't accidentally add junk from a sandbox while tinkering.
112+ die ( "Not yet ready for use " );
113+
114+ $ release_date = date ( 'Y-m-d H:i:s ' , strtotime ( $ tag ['date ' ] ) );
115+ $ committer_user_id = get_user_by ( 'login ' , $ tag ['author ' ] )->ID ;
116+ if ( ! $ committer_user_id ) {
117+ return new WP_Error ( 'invalid_committer ' , 'Invalid committer ' );
89118 }
90119
120+ $ release_id = wp_update_post ( array (
121+ 'ID ' => $ release_id ,
122+ 'post_type ' => 'plugin_release ' ,
123+ 'post_title ' => $ release ['version ' ],
124+ 'post_parent ' => $ plugin_id ,
125+ 'post_status ' => 'publish ' ,
126+ 'post_date ' => $ release_date , // And/or post_date_gmt?
127+ // Mirrors the metadata.
128+ 'meta_input ' => array (
129+ 'release_date ' => $ release ['date ' ],
130+ 'release_tag ' => $ release ['tag ' ],
131+ 'release_version ' => $ release ['version ' ],
132+ 'release_committer ' => $ release ['committer ' ],
133+ 'release_zips_built ' => $ release ['zips_built ' ],
134+ 'release_confirmations_required ' => $ release ['confirmations_required ' ],
135+ ),
136+ // TODO: what else? Could store the changelog or other content at the point of release for comparison purposes.
137+ ) );
138+
91139 return $ release_id ;
92140 }
93141
142+ /**
143+ * Update all release info for a plugin. This will insert or update each release, and remove any unknown releases.
144+ */
145+ public function update_releases ( $ plugin , $ releases ) {
146+ $ plugin_id = ( get_post ( $ plugin ) )->ID ;
147+
148+ // Make sure we don't accidentally add junk from a sandbox while tinkering.
149+ die ( "Not yet ready for use " );
150+
151+ $ changed = false ;
152+
153+ // The current releases, if any, that need to be updated.
154+ $ current_releases = $ this ->get_releases ( $ plugin );
155+ $ current_versions = wp_list_pluck ( $ current_releases , 'post_title ' , 'ID ' );
156+
157+ // Add or update each release.
158+ foreach ( $ releases as $ release ) {
159+ if ( ! isset ( $ current_versions [ $ release ['version ' ] ] ) ) {
160+ $ changed = $ changed | (bool )$ this ->add_release ( $ plugin , $ release );
161+ } else {
162+ $ release_id = $ current_versions [ $ release ['version ' ] ];
163+ $ changed = $ changed | (bool )$ this ->update_release ( $ release_id , $ release );
164+ }
165+ }
166+
167+ // Remove any releases that are no longer present.
168+ foreach ( $ current_releases as $ release_id => $ release ) {
169+ if ( ! in_array ( $ release ->post_title , wp_list_pluck ( $ releases , 'version ' ) ) ) {
170+ $ changed = $ changed | (bool )wp_delete_post ( $ release_id , true ); // Force delete.
171+ }
172+ }
173+
174+ return $ changed ;
175+ }
176+
94177 /**
95178 * Get a specific plugin release.
96179 */
0 commit comments