Adding old content "Discourse Rake Posts Snippets from BBCode to Markdown"
3
content/archives/2020/01/_index.id.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
title: Jan
|
||||||
|
---
|
3
content/archives/2020/01/_index.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
title: Jan
|
||||||
|
---
|
3
content/archives/2020/02/_index.id.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
title: Feb
|
||||||
|
---
|
3
content/archives/2020/02/_index.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
title: Feb
|
||||||
|
---
|
3
content/archives/2020/03/_index.id.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
title: Mar
|
||||||
|
---
|
3
content/archives/2020/03/_index.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
title: Mar
|
||||||
|
---
|
3
content/archives/2020/04/_index.id.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
title: Apr
|
||||||
|
---
|
3
content/archives/2020/04/_index.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
title: Apr
|
||||||
|
---
|
3
content/archives/2020/05/_index.id.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
title: Mei
|
||||||
|
---
|
3
content/archives/2020/05/_index.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
title: May
|
||||||
|
---
|
3
content/archives/2020/06/_index.id.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
title: Jun
|
||||||
|
---
|
3
content/archives/2020/06/_index.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
title: Jun
|
||||||
|
---
|
3
content/archives/2020/07/_index.id.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
title: Jul
|
||||||
|
---
|
3
content/archives/2020/07/_index.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
title: Jul
|
||||||
|
---
|
3
content/archives/2020/08/_index.id.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
title: Agu
|
||||||
|
---
|
3
content/archives/2020/08/_index.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
title: Aug
|
||||||
|
---
|
3
content/archives/2020/09/_index.id.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
title: Sep
|
||||||
|
---
|
3
content/archives/2020/09/_index.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
title: Sep
|
||||||
|
---
|
3
content/archives/2020/10/_index.id.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
title: Okt
|
||||||
|
---
|
3
content/archives/2020/10/_index.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
title: Oct
|
||||||
|
---
|
3
content/archives/2020/11/_index.id.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
title: Feb
|
||||||
|
---
|
3
content/archives/2020/11/_index.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
title: Nov
|
||||||
|
---
|
3
content/archives/2020/12/_index.id.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
title: Des
|
||||||
|
---
|
3
content/archives/2020/12/_index.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
title: Dec
|
||||||
|
---
|
3
content/archives/2020/_index.id.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
title: 2020
|
||||||
|
---
|
3
content/archives/2020/_index.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
title: 2020
|
||||||
|
---
|
After Width: | Height: | Size: 143 KiB |
After Width: | Height: | Size: 77 KiB |
|
@ -0,0 +1,189 @@
|
||||||
|
---
|
||||||
|
title: "Discourse Rake Posts Snippets from BBCode to Markdown"
|
||||||
|
description: "After migrated devilzc0de from MyBB to Discourse, many things needs to be done. One of them is to rake and rebake the BBCode tags posts to Markdown."
|
||||||
|
date: 2020-06-14T12:55:12+07:00
|
||||||
|
lastmod:
|
||||||
|
draft: false
|
||||||
|
noindex: false
|
||||||
|
featured: false
|
||||||
|
pinned: false
|
||||||
|
# comments: false
|
||||||
|
series:
|
||||||
|
# -
|
||||||
|
categories:
|
||||||
|
- SysAdmin
|
||||||
|
tags:
|
||||||
|
- Discourse
|
||||||
|
- Devilzc0de
|
||||||
|
- Ruby
|
||||||
|
- MyBB
|
||||||
|
- PostgreSQL
|
||||||
|
images:
|
||||||
|
# -
|
||||||
|
# menu:
|
||||||
|
# main:
|
||||||
|
# weight: 100
|
||||||
|
# params:
|
||||||
|
# icon:
|
||||||
|
# vendor: bs
|
||||||
|
# name: book
|
||||||
|
# color: '#e24d0e'
|
||||||
|
authors:
|
||||||
|
- ditatompel
|
||||||
|
---
|
||||||
|
|
||||||
|
It's been more than 1 year since I [migrated devilzc0de from MyBB to Discourse]({{< ref "/blog/story-behind-the-all-new-devilzc0de-migration-process/index.md" >}}) and many things needs to be done after the migration process is complete. One of them is to `rake` (and `rebake`, if needed) the **BBCode** tags to **Markdown** for each posts.
|
||||||
|
|
||||||
|
<!--more-->
|
||||||
|
|
||||||
|
Before you start you need to:
|
||||||
|
- Backup your forum before perform any actions because you may break every single posts content and PMs.
|
||||||
|
- Prepare your time and resource, especially if your forum had lots of posts.
|
||||||
|
- Know that Discourse use PostgreSQL database which use [POSIX regex](https://www.postgresql.org/docs/9.3/functions-matching.html#FUNCTIONS-POSIX-REGEXP) to perform regex matching and it will be case-sensitive.
|
||||||
|
- Know that you can use BBCode plugin for Discourse like [discourse-bbcode](https://meta.discourse.org/t/discourse-bbcode/65425) without perform any of these actions.
|
||||||
|
|
||||||
|
If you understand the risks (and you have another option) and still want to continue without additional plugins like I do, then go ahead. You need to enter your Discourse app by executing `./launcher enter app` from your root Discourse directory.
|
||||||
|
|
||||||
|
## Remove Color, Size, Align, and Font Tags
|
||||||
|
Color, size, font and align tags may different in each post, like `[color=#ff3333]` or `[color=red]`, `[font=‘Open Sans’, sans-serif]`, `[align=center]`, etc. These rake post command will remove any general BBCode color, size, font, and align tags.
|
||||||
|
|
||||||
|
![Discourse Rake](dc-rake.png#center)
|
||||||
|
|
||||||
|
![Discourse Replace BBCode to Markdown](feature-dc-rake-01.png#center)
|
||||||
|
|
||||||
|
### BBCode Color Tags
|
||||||
|
```ruby
|
||||||
|
rake posts:delete_word['\\[color.*?\\]|\\[\\/color\\]',regex]
|
||||||
|
```
|
||||||
|
|
||||||
|
### BBCode Size Tags
|
||||||
|
```ruby
|
||||||
|
rake posts:delete_word['\\[size.*?\\]|\\[\\/size\\]',regex]
|
||||||
|
```
|
||||||
|
### BBCode Align Tags
|
||||||
|
```ruby
|
||||||
|
rake posts:delete_word['\\[align.*?\\]|\\[\\/align\\]',regex]
|
||||||
|
```
|
||||||
|
|
||||||
|
### BBCode Font Tags
|
||||||
|
```ruby
|
||||||
|
rake posts:delete_word['\\[font.*?\\]|\\[\\/font\\]',regex]
|
||||||
|
```
|
||||||
|
|
||||||
|
### All of Them Together
|
||||||
|
```ruby
|
||||||
|
rake posts:delete_word['\\[color.*?\\]|\\[\\/color\\]|\\[size.*?\\]|\\[\\/size\\]|\\[align.*?\\]|\\[\\/align\\]|\\[font.*?\\]|\\[\\/font\\]',regex]
|
||||||
|
```
|
||||||
|
|
||||||
|
> _**Note**: The regex is **case-sensitive**, tags with **uppercase** will not be removed. You need to check posts again by your self._
|
||||||
|
|
||||||
|
## Replace String or Words (Remap)
|
||||||
|
You can use `rake post:remap` to perform simple replacement. For example, oldest devilzc0de forum post is from 2010 where at that time, we rarely found sites using https.
|
||||||
|
|
||||||
|
But now, https is everywhere and browser won't display mixed content. So, to replace `http://` to `https://` for each posts :
|
||||||
|
```ruby
|
||||||
|
rake posts:remap["http://","https://"]
|
||||||
|
```
|
||||||
|
|
||||||
|
This works for tagging user tags and emoji too.
|
||||||
|
|
||||||
|
> _**Note**: You may increase `sidekiq` workers by updating Discourse `app.yml` `UNICORN_SIDEKIQS` **env** to spin up sidekiq queue for onebox and remote image fetch after remapping http to https._
|
||||||
|
|
||||||
|
Unfortunately, rake remap doesn't work for `[code]`, `[spoiler]`, `[php]`, and `[qoute]` tags. Here is the example :
|
||||||
|
|
||||||
|
In old MyBB forum, user using `[code]` block following with the actual codes without new line will work. But, markdown code tags works if you use new line after <code>```</code> block.
|
||||||
|
|
||||||
|
```plain
|
||||||
|
[code]var promise = new Promise(function(resolve, reject) {
|
||||||
|
// do a thing, possibly async, then…
|
||||||
|
|
||||||
|
if (/* everything is fine */) {
|
||||||
|
resolve("Worked!");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
reject(Error("Didn't work"));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
[/code]
|
||||||
|
```
|
||||||
|
|
||||||
|
`[code]` tags above will work on **MyBB** and produce:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var promise = new Promise(function(resolve, reject) {
|
||||||
|
// do a thing, possibly async, then…
|
||||||
|
|
||||||
|
if (/* everything is fine */) {
|
||||||
|
resolve("Worked!");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
reject(Error("Didn't work"));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
But on Discourse which use **Markdown**, if I replace `[code]` tags with <code>```</code> will produce :
|
||||||
|
<pre>```var promise = new Promise(function(resolve, reject) {
|
||||||
|
// do a thing, possibly async, then…
|
||||||
|
|
||||||
|
if (/* everything is fine */) {
|
||||||
|
resolve("Worked!");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
reject(Error("Didn't work"));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
```
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
Code above **will not recognised as code block**. We need to add **new line** after first opening <code>\```</code> block. Unfortunately (at least for me), using <code>rake posts:remap["[code]","```\n"]</code> doesn't work and only produce the **"\n"** as plain text. The only working solution for me is **directly update raw PG database**.
|
||||||
|
|
||||||
|
## PostgreSQL Raw Update
|
||||||
|
You need to enter **PostgreSQL** on your Discourse app to run all PG query below. If you don't know how to do it, run `su -c 'psql discourse' postgres` after `./launcher enter app` command.
|
||||||
|
|
||||||
|
> _**Note**: You need to `rebake` your post after update PostgreSQL post DB. To avoid rebake all your posts, you can use `rebake_match`. See example below._
|
||||||
|
|
||||||
|
### Replace Spoiler Tags With Details Tags
|
||||||
|
```sql
|
||||||
|
UPDATE posts set raw=replace(raw, '[spoiler]', '[details=Spoiler]'||chr(10)) where raw like '%[spoiler]%';
|
||||||
|
UPDATE posts set raw=replace(raw, '[spoiler=', '[details=') where raw like '%[spoiler=%';
|
||||||
|
UPDATE posts set raw=replace(raw, '[/spoiler]', chr(10)||'[/details]') where raw like '%[/spoiler]%';
|
||||||
|
```
|
||||||
|
|
||||||
|
After updating database, exit from postgres user and run rebake post.
|
||||||
|
```ruby
|
||||||
|
rake posts:rebake_match["\[details"]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Replace MyBB [php] Tags With Markdown PHP Syntax Highlight
|
||||||
|
```sql
|
||||||
|
UPDATE posts set raw=replace(raw, '[php]', '```php'||chr(10)) where raw like '%[php]%';
|
||||||
|
UPDATE posts set raw=replace(raw, '[/php]', chr(10)||'```') where raw like '%[/php]%';
|
||||||
|
```
|
||||||
|
|
||||||
|
After updating database, exit from postgres user and run rebake post.
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
rake posts:rebake_match["\`\`\`php"]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Replace [code] tags With Markdown Tags
|
||||||
|
```sql
|
||||||
|
UPDATE posts set raw=replace(raw, '[code]', '```'||chr(10)) where raw like '%[code]%';
|
||||||
|
UPDATE posts set raw=replace(raw, '[/code]', chr(10)||'```') where raw like '%[/code]%';
|
||||||
|
```
|
||||||
|
|
||||||
|
After updating database, exit from postgres user and run rebake post.
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
rake posts:rebake_match["\`\`\`"]
|
||||||
|
```
|
||||||
|
|
||||||
|
## ToDo's
|
||||||
|
- `[ul]`, `[ol]` and `[li]` tags replace to Markdown list tags
|
||||||
|
- `[quote]` Tags to Markdown quote tags
|
||||||
|
|
||||||
|
Please share if you have done mass replace for those two to do lists above.
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
- [Cameron:D](https://meta.discourse.org/t/replace-a-string-in-all-posts/48729/70?u=ditatompel) and [Coin-coin le Canapin](https://meta.discourse.org/t/replace-a-string-in-all-posts/48729/72?u=ditatompel) post.
|
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 40 KiB |
After Width: | Height: | Size: 88 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 11 KiB |