J’ai créé un plugin qui télécharge une image dans des sujets et j’enregistre le chemin du fichier dans des custom_fields. Cependant, Discourse supprime toutes les images téléchargées pour les sujets en considérant qu’elles sont orphelines car elles ne sont pas liées aux sujets.
Par conséquent, quelqu’un peut-il me guider sur la façon de lier les images téléchargées aux sujets respectifs ?
J'ai essayé de mettre à jour l'image_upload_idmais d'une manière ou d'une autre, la valeur de la colonne dans la tabletopic n'est pas mise à jour.
Désolé, ce n’était qu’une réponse partielle, elle empêchera seulement les images d’être orphelines. Vous devriez pouvoir définir topic.image_upload_id à partir de votre code, mais il sera écrasé lorsque le HTML d’un message sera re-cuit. Vous devriez donc également vous accrocher au code de re-cuisson.
Pouvez-vous me guider sur la façon dont je peux faire cela ? Si vous pouvez partager quelques exemples, car je ne connais pas beaucoup Ruby, mais je peux travailler avec JavaScript et je suis nouveau sur Discourse, donc je ne connais pas grand-chose à la personnalisation de Discourse :sweat_smile:
def update_post_image
super # appel à l'original
if @post.custom_fields[:your_field_name_upload_id]
upload_id = @post.custom_fields[:your_field_name_upload_id]
@post.update_column(:image_upload_id, upload_id) # post
if @post.is_first_post? # sujet
@post.topic.update_column(:image_upload_id, upload_id)
end
end
end
Il a mis à jour l’image_upload_id pour les publications et les sujets, mais les images sont toujours supprimées. J’ai utilisé la fonction API register_upload_in_use.
J’ai ajouté le code ci-dessous pour vérifier dans les custom_fields du sujet où topic_file_upload est le nom du champ. Est-ce la bonne façon de faire ?
if respond_to?(:register_upload_in_use)
register_upload_in_use do |upload|
TopicCustomField.where(
name: 'topic_file_upload',
value: [upload.url, upload.sha1]
).exists?
end
end
Que contient TopicCustomField ? Je suppose qu’il contient l’ID de téléchargement ?
Dans ce cas, cela devrait plutôt ressembler à ceci :
if respond_to?(:register_upload_in_use)
register_upload_in_use do |upload|
TopicCustomField.where(
name: 'topic_file_upload',
value: upload.id
).exists?
end
end
Il a l’URL de l’image mais j’ai ajouté un nouveau champ dans les champs personnalisés pour l’ID de l’image et je vérifie maintenant l’ID comme vous l’avez mentionné dans le code. Je pense que si j’avais utilisé le code ci-dessous, cela aurait peut-être fonctionné ?