From 2e58d9a9f2321b5a36c5ca2857732fd85c30d65e Mon Sep 17 00:00:00 2001 From: Povilas Staskus Date: Thu, 6 Jun 2024 08:54:47 +0300 Subject: [PATCH 1/3] Support media metadata editing for XML-RPC connected self-hosted sites - Updated WordPressKit supports editing title, description, and caption of the media via XML-RPC - XML-RPC API doesn't support editing alt-text --- WordPress/Classes/Models/Blog.h | 2 ++ WordPress/Classes/Models/Blog.m | 7 ++++++- .../ViewRelated/Media/MediaItemViewController.swift | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/WordPress/Classes/Models/Blog.h b/WordPress/Classes/Models/Blog.h index b51745c46ef6..5accbdb11e7e 100644 --- a/WordPress/Classes/Models/Blog.h +++ b/WordPress/Classes/Models/Blog.h @@ -74,6 +74,8 @@ typedef NS_ENUM(NSUInteger, BlogFeature) { BlogFeatureNoncePreviews, /// Does the blog support editing media metadata? BlogFeatureMediaMetadataEditing, + /// Does the blog support editing media alternative text? + BlogFeatureMediaAltEditing, /// Does the blog support deleting media? BlogFeatureMediaDeletion, /// Does the blog support Stock Photos feature (free photos library) diff --git a/WordPress/Classes/Models/Blog.m b/WordPress/Classes/Models/Blog.m index feddd8d5b41a..f9c2bda51d9e 100644 --- a/WordPress/Classes/Models/Blog.m +++ b/WordPress/Classes/Models/Blog.m @@ -592,7 +592,12 @@ - (BOOL)supports:(BlogFeature)feature case BlogFeatureNoncePreviews: return [self supportsRestApi] && ![self isHostedAtWPcom]; case BlogFeatureMediaMetadataEditing: - return [self supportsRestApi] && [self isAdmin]; + return [self isAdmin]; + case BlogFeatureMediaAltEditing: + // alt is not supported via XML-RPC API + // https://core.trac.wordpress.org/ticket/58582 + // https://github.com/wordpress-mobile/WordPress-Android/issues/18514#issuecomment-1589752274 + return [self supportsRestApi]; case BlogFeatureMediaDeletion: return [self isAdmin]; case BlogFeatureHomepageSettings: diff --git a/WordPress/Classes/ViewRelated/Media/MediaItemViewController.swift b/WordPress/Classes/ViewRelated/Media/MediaItemViewController.swift index 783d9d571920..0464ae16d339 100644 --- a/WordPress/Classes/ViewRelated/Media/MediaItemViewController.swift +++ b/WordPress/Classes/ViewRelated/Media/MediaItemViewController.swift @@ -66,7 +66,7 @@ final class MediaItemViewController: UITableViewController { action: editAlt()) var mediaInfoRows = [titleRow, captionRow, descRow] - if media.mediaType == .image { + if media.mediaType == .image && media.blog.supports(BlogFeature.mediaAltEditing) { mediaInfoRows.append(altRow) } From 623f76f3e9226fe08dafb8c72f67c9c2553ee793 Mon Sep 17 00:00:00 2001 From: Povilas Staskus Date: Fri, 21 Jun 2024 13:55:27 +0300 Subject: [PATCH 2/3] Support editing media metadata via XMLRPC in MediaService Media is a type of a post therefore "wp.editPost" can be used to edit media metadata. Note that alternative text cannot be edited due to lack of XML-RPC support https://core.trac.wordpress.org/ticket/58582 --- .../Services/MediaServiceRemoteXMLRPC.m | 48 ++++++++++++++++--- 1 file changed, 41 insertions(+), 7 deletions(-) diff --git a/WordPressKit/Sources/WordPressKit/Services/MediaServiceRemoteXMLRPC.m b/WordPressKit/Sources/WordPressKit/Services/MediaServiceRemoteXMLRPC.m index 0d0059eac0e3..33018c5b772e 100644 --- a/WordPressKit/Sources/WordPressKit/Services/MediaServiceRemoteXMLRPC.m +++ b/WordPressKit/Sources/WordPressKit/Services/MediaServiceRemoteXMLRPC.m @@ -183,13 +183,13 @@ - (void)uploadMedia:(RemoteMedia *)media success(remoteMedia); } } - } failure:^(NSError *error, NSHTTPURLResponse *httpResponse) { + } failure:^(NSError *error, NSHTTPURLResponse *httpResponse) { if (failure) { failure(error); } }]; - + if (progress) { *progress = localProgress; } @@ -199,10 +199,44 @@ - (void)updateMedia:(RemoteMedia *)media success:(void (^)(RemoteMedia *remoteMedia))success failure:(void (^)(NSError *error))failure { - //HACK: Sergio Estevao: 2016-04-06 this option doens't exist on XML-RPC so we will always say that all was good - if (success) { - success(media); + NSParameterAssert([media.mediaID longLongValue] > 0); + + NSMutableDictionary *content = [NSMutableDictionary dictionary]; + + if (media.title != nil) { + content[@"post_title"] = media.title; + } + + if (media.caption != nil) { + content[@"post_excerpt"] = media.caption; } + + if (media.descriptionText != nil) { + content[@"post_content"] = media.descriptionText; + } + + NSArray *extraDefaults = @[media.mediaID]; + NSArray *parameters = [self XMLRPCArgumentsWithExtraDefaults:extraDefaults andExtra:content]; + + [self.api callMethod:@"wp.editPost" + parameters:parameters + success:^(id responseObject, NSHTTPURLResponse *httpResponse) { + BOOL updated = [responseObject boolValue]; + if (updated) { + if (success) { + success(media); + } + } else { + if (failure) { + NSError *error = [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorUnknown userInfo:nil]; + failure(error); + } + } + } failure:^(NSError *error, NSHTTPURLResponse *httpResponse) { + if (failure) { + failure(error); + } + }]; } - (void)deleteMedia:(RemoteMedia *)media @@ -286,11 +320,11 @@ - (RemoteMedia *)remoteMediaFromXMLRPCDictionary:(NSDictionary*)xmlRPC link = [xmlRPC stringForKeyPath:@"link"]; } remoteMedia.file = [link lastPathComponent] ?: [[xmlRPC objectForKeyPath:@"file"] lastPathComponent]; - + if ([xmlRPC stringForKeyPath:@"metadata.sizes.large.file"] != nil) { remoteMedia.largeURL = [NSURL URLWithString: [NSString stringWithFormat:@"%@%@", remoteMedia.url.URLByDeletingLastPathComponent, [xmlRPC stringForKeyPath:@"metadata.sizes.large.file"]]]; } - + if ([xmlRPC stringForKeyPath:@"metadata.sizes.medium.file"] != nil) { remoteMedia.mediumURL = [NSURL URLWithString: [NSString stringWithFormat:@"%@%@", remoteMedia.url.URLByDeletingLastPathComponent, [xmlRPC stringForKeyPath:@"metadata.sizes.medium.file"]]]; } From fbe8c8de683783919f13d32162dd744a6117b8b1 Mon Sep 17 00:00:00 2001 From: Povilas Staskus Date: Fri, 21 Jun 2024 14:00:31 +0300 Subject: [PATCH 3/3] Update RELEASE-NOTES.txt --- RELEASE-NOTES.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index 93292199560f..29a5cd85872a 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -4,6 +4,7 @@ * [*] [Jetpack-only] Stats: Made optimizations to enhance scrolling performance. [#22847] * [*] Simplify post list context menu sections [#23356] * [*] Fix an issue with incorrect snackbar shown when saving drafts manually [#23358] +* [**] Support editing media metadata for sites not powered by Jetpack and reliant on XML-RPC [#23316] 25.1 -----