@@ -77,20 +77,103 @@ public function add_release( $plugin, $release ) {
77
77
// Make sure we don't accidentally add junk from a sandbox while tinkering.
78
78
die ( "Not yet ready for use " );
79
79
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
+
80
86
$ release_id = wp_insert_post ( array (
81
87
'post_type ' => 'plugin_release ' ,
82
88
'post_title ' => $ release ['version ' ],
83
89
'post_parent ' => $ plugin_id ,
84
90
'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.
85
102
) );
86
103
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 ' );
89
118
}
90
119
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
+
91
139
return $ release_id ;
92
140
}
93
141
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
+
94
177
/**
95
178
* Get a specific plugin release.
96
179
*/
0 commit comments