mirror of
https://github.com/philomena-dev/philomena.git
synced 2025-02-01 03:46:44 +01:00
54 lines
1.8 KiB
Elixir
54 lines
1.8 KiB
Elixir
defmodule Mix.Tasks.ConvertToMarkdown do
|
|
use Mix.Task
|
|
|
|
import Ecto.Query
|
|
alias Philomena.Repo
|
|
alias Philomena.Batch
|
|
alias PhilomenaWeb.TextileMarkdownRenderer
|
|
|
|
@modules [
|
|
{Philomena.Badges.Badge, [:description]},
|
|
{Philomena.Channels.Channel, [:description]},
|
|
{Philomena.Comments.Comment, [:body]},
|
|
{Philomena.Commissions.Commission, [:contact, :information, :will_create, :will_not_create]},
|
|
{Philomena.Commissions.Item, [:description, :add_ons]},
|
|
{Philomena.Conversations.Message, [:body]},
|
|
{Philomena.DnpEntries.DnpEntry, [:conditions, :reason, :instructions]},
|
|
{Philomena.Filters.Filter, [:description]},
|
|
{Philomena.Galleries.Gallery, [:description]},
|
|
{Philomena.Images.Image, [:description]},
|
|
{Philomena.ModNotes.ModNote, [:body]},
|
|
{Philomena.Posts.Post, [:body]},
|
|
{Philomena.Reports.Report, [:report]},
|
|
{Philomena.Tags.Tag, [:description]},
|
|
{Philomena.Users.User, [:description, :scratchpad]},
|
|
]
|
|
|
|
@shortdoc "Rewrites all database rows from Textile to Markdown."
|
|
@requirements ["app.start"]
|
|
@impl Mix.Task
|
|
def run(args) do
|
|
if Mix.env() == :prod and not Enum.member?(args, "--i-know-what-im-doing") do
|
|
raise "do not run this task in production unless you know what you're doing"
|
|
end
|
|
|
|
Enum.map(@modules, fn {mod, fields} ->
|
|
Batch.record_batches(mod, fn batch ->
|
|
Enum.map(batch, fn item ->
|
|
updates = Enum.reduce(fields, [], fn field, kwlist ->
|
|
fval = Map.fetch!(item, field)
|
|
[{:"#{field}_md", TextileMarkdownRenderer.render_one(%{body: fval})} | kwlist]
|
|
end)
|
|
|
|
(mod
|
|
|> where(id: ^item.id)
|
|
|> Repo.update_all(set: updates))
|
|
|
|
IO.write("\r#{mod}\t#{item.id}\t")
|
|
end)
|
|
end)
|
|
|
|
IO.puts("")
|
|
end)
|
|
end
|
|
end
|