0xffff-one / flarum-0x Goto Github PK
View Code? Open in Web Editor NEW🔧 Customized Flarum for the 0xFFFF Community.
Home Page: https://0xffff.one
License: MIT License
🔧 Customized Flarum for the 0xFFFF Community.
Home Page: https://0xffff.one
License: MIT License
cc: @fengkx
将站点的第三方图片外链都保存到本地和云存储
Creating and editing a patch file may not be very maintainable, it would be better to save and edit a full `.php' file.
ref: https://discuss.flarum.org/d/30868-completely-disable-s9e-text-formatter/2
目前站点的图片附件用的阿里云 CDN 代理加载,但因为域名无法备案,只能用香港的服务器,带宽方面是个鸡肋,目前发现腾讯云 COS 可以很方便地做静态 CDN,准备尝试这样的方案。
大致需完成两步:
完成后可实现图片的秒开
避免帖子因掉电、杀进程(尤其是移动端)、系统崩溃等原因丢失原来的编辑记录
基于 localStorage 实现
这个扩展需要更新一波,适配 beta.16 的API
https://github.com/AmauryCarrade/flarum-ext-syndication
Originally posted by @zgq354 in #15 (comment)
由于期望本站的附件都放在对象存储服务(类 Amazon S3,目前是用腾讯云),避免服务器维护文件下载的开销。
fof/upload 插件存在一些问题会影响它的体验:
核心问题:依赖 php 透传上传下载,服务器多一层带宽压力
期望实现:
可以直接在浏览器直连对象存储上传文件,获得最大带宽使用效率,且无严格文件大小限制,并能用上云服务提供的图片处理的功能。
其他细节问题(低优先级):
Originally posted by @zgq354 in #15 (comment)
目前站点用的 flarum 还是 beta.13 版,flarum 官方发布了 beta.14 版本,为了跟上主线的更新,需要升级核心。
由于 beta.14 前后端框架都做了大量的重构和版本升级,所有的魔改与第三方插件都需更新以便兼容
(具体涉及的修改点待梳理)
Flarum 自带编辑器不支持 LaTeX 公式解析,暂无法满足数学讨论的需求,需要跟进解决。
Reference:
线性代数讨论贴 - 0xFFFF
可选的插件:fof/reactions
https://github.com/FriendsOfFlarum/reactions
https://discuss.flarum.org/d/20655-friendsofflarum-reactions
待测试与验证,看如何实现比较合适
首先是正文里面\$的转义无效,然后这会导致下面问题
https://0xffff.one/d/1238-lun-tan-fa-tie-xing-nei-gong-shi/11
建议添加\$的转义
error log:
[2022-02-12 14:40:08] flarum.ERROR: Error: Call to a member function getStatusCode() on null in /wwwroot/vendor/askvortsov/flarum-pwa/src/PushNotificationDriver.php:143
Stack trace:
#0 /wwwroot/vendor/flarum/core/src/Notification/NotificationSyncer.php(110): Askvortsov\FlarumPWA\PushNotificationDriver->send(Object(Flarum\Mentions\Notification\PostMentionedBlueprint), Array)
#1 /wwwroot/vendor/flarum/mentions/src/Listener/UpdateMentionsMetadataWhenVisible.php(84): Flarum\Notification\NotificationSyncer->sync(Object(Flarum\Mentions\Notification\PostMentionedBlueprint), Array)
#2 /wwwroot/vendor/flarum/mentions/src/Listener/UpdateMentionsMetadataWhenVisible.php(51): Flarum\Mentions\Listener\UpdateMentionsMetadataWhenVisible->syncPostMentions(Object(Flarum\Post\CommentPost), Array)
#3 /wwwroot/vendor/illuminate/events/Dispatcher.php(424): Flarum\Mentions\Listener\UpdateMentionsMetadataWhenVisible->handle(Object(Flarum\Post\Event\Posted))
#4 /wwwroot/vendor/illuminate/events/Dispatcher.php(249): Illuminate\Events\Dispatcher->Illuminate\Events\{closure}('Flarum\\Post\\Eve...', Array)
#5 /wwwroot/vendor/flarum/core/src/Foundation/DispatchEventsTrait.php(33): Illuminate\Events\Dispatcher->dispatch('Flarum\\Post\\Eve...')
#6 /wwwroot/vendor/flarum/core/src/Post/Command/PostReplyHandler.php(104): Flarum\Post\Command\PostReplyHandler->dispatchEventsFor(Object(Flarum\Post\CommentPost), Object(Flarum\User\User))
#7 /wwwroot/vendor/flarum/core/src/Notification/NotificationSyncer.php(148): Flarum\Post\Command\PostReplyHandler->Flarum\Post\Command\{closure}()
#8 /wwwroot/vendor/flarum/core/src/Post/Command/PostReplyHandler.php(105): Flarum\Notification\NotificationSyncer->onePerUser(Object(Closure))
#9 /wwwroot/vendor/illuminate/bus/Dispatcher.php(122): Flarum\Post\Command\PostReplyHandler->handle(Object(Flarum\Post\Command\PostReply))
#10 /wwwroot/vendor/illuminate/pipeline/Pipeline.php(128): Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}(Object(Flarum\Post\Command\PostReply))
#11 /wwwroot/vendor/illuminate/pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Flarum\Post\Command\PostReply))
#12 /wwwroot/vendor/illuminate/bus/Dispatcher.php(132): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#13 /wwwroot/vendor/illuminate/bus/Dispatcher.php(78): Illuminate\Bus\Dispatcher->dispatchNow(Object(Flarum\Post\Command\PostReply))
#14 /wwwroot/vendor/flarum/core/src/Api/Controller/CreatePostController.php(62): Illuminate\Bus\Dispatcher->dispatch(Object(Flarum\Post\Command\PostReply))
#15 /wwwroot/vendor/flarum/core/src/Api/Controller/AbstractSerializeController.php(115): Flarum\Api\Controller\CreatePostController->data(Object(Laminas\Diactoros\ServerRequest), Object(Tobscure\JsonApi\Document))
#16 /wwwroot/vendor/flarum/core/src/Api/Controller/AbstractCreateController.php(22): Flarum\Api\Controller\AbstractSerializeController->handle(Object(Laminas\Diactoros\ServerRequest))
#17 /wwwroot/vendor/flarum/core/src/Http/RouteHandlerFactory.php(41): Flarum\Api\Controller\AbstractCreateController->handle(Object(Laminas\Diactoros\ServerRequest))
#18 /wwwroot/vendor/flarum/core/src/Http/Middleware/ExecuteRoute.php(27): Flarum\Http\RouteHandlerFactory->Flarum\Http\{closure}(Object(Laminas\Diactoros\ServerRequest), Array)
#19 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Flarum\Http\Middleware\ExecuteRoute->process(Object(Laminas\Diactoros\ServerRequest), Object(Closure))
#20 /wwwroot/vendor/flarum/core/src/Api/Middleware/ThrottleApi.php(33): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#21 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Flarum\Api\Middleware\ThrottleApi->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#22 /wwwroot/vendor/flarum/core/src/Http/Middleware/CheckCsrfToken.php(44): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#23 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Flarum\Http\Middleware\CheckCsrfToken->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#24 /wwwroot/vendor/flarum/core/src/Http/Middleware/ResolveRoute.php(67): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#25 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Flarum\Http\Middleware\ResolveRoute->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#26 /wwwroot/vendor/flarum/core/src/Http/Middleware/SetLocale.php(51): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#27 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Flarum\Http\Middleware\SetLocale->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#28 /wwwroot/vendor/flarum/core/src/Http/Middleware/AuthenticateWithHeader.php(58): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#29 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Flarum\Http\Middleware\AuthenticateWithHeader->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#30 /wwwroot/vendor/flarum/core/src/Http/Middleware/AuthenticateWithSession.php(31): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#31 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Flarum\Http\Middleware\AuthenticateWithSession->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#32 /wwwroot/vendor/flarum/core/src/Http/Middleware/RememberFromCookie.php(52): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#33 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Flarum\Http\Middleware\RememberFromCookie->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#34 /wwwroot/vendor/flarum/core/src/Http/Middleware/StartSession.php(61): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#35 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Flarum\Http\Middleware\StartSession->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#36 /wwwroot/vendor/flarum/core/src/Api/Middleware/FakeHttpMethods.php(29): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#37 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Flarum\Api\Middleware\FakeHttpMethods->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#38 /wwwroot/vendor/flarum/core/src/Http/Middleware/ParseJsonBody.php(28): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#39 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Flarum\Http\Middleware\ParseJsonBody->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#40 /wwwroot/vendor/flarum/core/src/Http/Middleware/HandleErrors.php(57): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#41 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Flarum\Http\Middleware\HandleErrors->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#42 /wwwroot/vendor/flarum/core/src/Http/Middleware/InjectActorReference.php(25): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#43 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Flarum\Http\Middleware\InjectActorReference->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#44 /wwwroot/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(76): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#45 /wwwroot/vendor/middlewares/request-handler/src/RequestHandler.php(84): Laminas\Stratigility\MiddlewarePipe->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#46 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Middlewares\RequestHandler->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#47 /wwwroot/vendor/middlewares/base-path-router/src/BasePathRouter.php(101): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#48 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Middlewares\BasePathRouter->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#49 /wwwroot/vendor/laminas/laminas-stratigility/src/Middleware/OriginalMessages.php(36): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#50 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Laminas\Stratigility\Middleware\OriginalMessages->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#51 /wwwroot/vendor/middlewares/base-path/src/BasePath.php(73): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#52 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Middlewares\BasePath->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#53 /wwwroot/vendor/flarum/core/src/Http/Middleware/ProcessIp.php(24): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#54 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(51): Flarum\Http\Middleware\ProcessIp->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#55 /wwwroot/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(76): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#56 /wwwroot/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(65): Laminas\Stratigility\MiddlewarePipe->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\EmptyPipelineHandler))
#57 /wwwroot/vendor/laminas/laminas-httphandlerrunner/src/RequestHandlerRunner.php(96): Laminas\Stratigility\MiddlewarePipe->handle(Object(Laminas\Diactoros\ServerRequest))
#58 /wwwroot/vendor/flarum/core/src/Http/Server.php(44): Laminas\HttpHandlerRunner\RequestHandlerRunner->run()
#59 /wwwroot/public/index.php(26): Flarum\Http\Server->listen()
#60 {main}
导致回复超时的问题,可能与它有关系:#28
https://github.com/the-turk/flarum-mathren
https://discuss.flarum.org/d/22439-mathren-tex-math-rendering/65
需兼容 beta.16
Originally posted by @zgq354 in #15 (comment)
问题:
dev.0xffff.one 无法收到帐户激活邮件,发帖和回帖功能无法使用(应该跟帐户没激活存在因果联系,不另外开 issue 了)。
复现步骤:
(1) 访问 https://dev.0xffff.one/
(2) 点击位于导航栏的 Sign Up 链接
(3) 输入合规的帐户名、密码和邮箱,点击 Sign Up
(4) 弹出提示信息如下:
Oops! Something went wrong. Please reload the page and try again.
(5) 点击第 4 步弹出信息的 DEBUG 链接,显示内容如下:
POST https://dev.0xffff.one/register
Swift_TransportException: Expected response code 220 but got an empty response in file /wwwroot/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php on line 447
Stack trace:
1. Swift_TransportException->() /wwwroot/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php:447
2. Swift_Transport_AbstractSmtpTransport->assertResponseCode() /wwwroot/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php:360
3. Swift_Transport_AbstractSmtpTransport->readGreeting() /wwwroot/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php:147
4. Swift_Transport_AbstractSmtpTransport->start() /wwwroot/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php:50
5. Swift_Transport_SendmailTransport->start() /wwwroot/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer.php:65
6. Swift_Mailer->send() /wwwroot/vendor/illuminate/mail/Mailer.php:521
7. Illuminate\Mail\Mailer->sendSwiftMessage() /wwwroot/vendor/illuminate/mail/Mailer.php:288
8. Illuminate\Mail\Mailer->send() /wwwroot/vendor/illuminate/mail/Mailer.php:212
9. Illuminate\Mail\Mailer->raw() /wwwroot/vendor/flarum/core/src/Mail/Job/SendRawEmailJob.php:34
10. Flarum\Mail\Job\SendRawEmailJob->handle() /wwwroot/vendor/illuminate/container/BoundMethod.php:36
11. Illuminate\Container\BoundMethod->Illuminate\Container\{closure}() /wwwroot/vendor/illuminate/container/Util.php:40
12. Illuminate\Container\Util->unwrapIfClosure() /wwwroot/vendor/illuminate/container/BoundMethod.php:93
13. Illuminate\Container\BoundMethod->callBoundMethod() /wwwroot/vendor/illuminate/container/BoundMethod.php:37
14. Illuminate\Container\BoundMethod->call() /wwwroot/vendor/illuminate/container/Container.php:611
15. Illuminate\Container\Container->call() /wwwroot/vendor/illuminate/bus/Dispatcher.php:128
16. Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}() /wwwroot/vendor/illuminate/pipeline/Pipeline.php:128
17. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() /wwwroot/vendor/illuminate/pipeline/Pipeline.php:103
18. Illuminate\Pipeline\Pipeline->then() /wwwroot/vendor/illuminate/bus/Dispatcher.php:132
19. Illuminate\Bus\Dispatcher->dispatchNow() /wwwroot/vendor/illuminate/queue/CallQueuedHandler.php:118
20. Illuminate\Queue\CallQueuedHandler->Illuminate\Queue\{closure}() /wwwroot/vendor/illuminate/pipeline/Pipeline.php:128
21. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() /wwwroot/vendor/illuminate/pipeline/Pipeline.php:103
22. Illuminate\Pipeline\Pipeline->then() /wwwroot/vendor/illuminate/queue/CallQueuedHandler.php:120
23. Illuminate\Queue\CallQueuedHandler->dispatchThroughMiddleware() /wwwroot/vendor/illuminate/queue/CallQueuedHandler.php:70
24. Illuminate\Queue\CallQueuedHandler->call() /wwwroot/vendor/illuminate/queue/Jobs/Job.php:98
25. Illuminate\Queue\Jobs\Job->fire() /wwwroot/vendor/illuminate/queue/SyncQueue.php:43
26. Illuminate\Queue\SyncQueue->push() /wwwroot/vendor/flarum/core/src/User/AccountActivationMailer.php:68
27. Flarum\User\AccountActivationMailer->handle() /wwwroot/vendor/illuminate/events/Dispatcher.php:412
28. Illuminate\Events\Dispatcher->Illuminate\Events\{closure}() /wwwroot/vendor/illuminate/events/Dispatcher.php:237
29. Illuminate\Events\Dispatcher->dispatch() /wwwroot/vendor/flarum/core/src/Foundation/DispatchEventsTrait.php:33
30. Flarum\User\Command\RegisterUserHandler->dispatchEventsFor() /wwwroot/vendor/flarum/core/src/User/Command/RegisterUserHandler.php:112
31. Flarum\User\Command\RegisterUserHandler->handle() /wwwroot/vendor/illuminate/bus/Dispatcher.php:122
32. Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}() /wwwroot/vendor/illuminate/pipeline/Pipeline.php:128
33. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() /wwwroot/vendor/illuminate/pipeline/Pipeline.php:103
34. Illuminate\Pipeline\Pipeline->then() /wwwroot/vendor/illuminate/bus/Dispatcher.php:132
35. Illuminate\Bus\Dispatcher->dispatchNow() /wwwroot/vendor/illuminate/bus/Dispatcher.php:78
36. Illuminate\Bus\Dispatcher->dispatch() /wwwroot/vendor/flarum/core/src/Api/Controller/CreateUserController.php:45
37. Flarum\Api\Controller\CreateUserController->data() /wwwroot/vendor/flarum/core/src/Api/Controller/AbstractSerializeController.php:102
38. Flarum\Api\Controller\AbstractSerializeController->handle() /wwwroot/vendor/flarum/core/src/Api/Controller/AbstractCreateController.php:22
39. Flarum\Api\Controller\AbstractCreateController->handle() /wwwroot/vendor/flarum/core/src/Api/Client.php:72
40. Flarum\Api\Client->send() /wwwroot/vendor/flarum/core/src/Forum/Controller/RegisterController.php:59
41. Flarum\Forum\Controller\RegisterController->handle() /wwwroot/vendor/flarum/core/src/Http/RouteHandlerFactory.php:38
42. Flarum\Http\RouteHandlerFactory->Flarum\Http\{closure}() /wwwroot/vendor/flarum/core/src/Http/Middleware/ExecuteRoute.php:27
43. Flarum\Http\Middleware\ExecuteRoute->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
44. Laminas\Stratigility\Next->handle() /wwwroot/vendor/flarum/core/src/Http/Middleware/FlarumPromotionHeader.php:29
45. Flarum\Http\Middleware\FlarumPromotionHeader->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
46. Laminas\Stratigility\Next->handle() /wwwroot/vendor/flarum/core/src/Http/Middleware/ShareErrorsFromSession.php:57
47. Flarum\Http\Middleware\ShareErrorsFromSession->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
48. Laminas\Stratigility\Next->handle() /wwwroot/vendor/flarum/core/src/Http/Middleware/CheckCsrfToken.php:44
49. Flarum\Http\Middleware\CheckCsrfToken->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
50. Laminas\Stratigility\Next->handle() /wwwroot/vendor/flarum/core/src/Http/Middleware/ResolveRoute.php:67
51. Flarum\Http\Middleware\ResolveRoute->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
52. Laminas\Stratigility\Next->handle() /wwwroot/vendor/flarum/core/src/Http/Middleware/SetLocale.php:50
53. Flarum\Http\Middleware\SetLocale->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
54. Laminas\Stratigility\Next->handle() /wwwroot/vendor/flarum/core/src/Http/Middleware/AuthenticateWithSession.php:32
55. Flarum\Http\Middleware\AuthenticateWithSession->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
56. Laminas\Stratigility\Next->handle() /wwwroot/vendor/flarum/core/src/Http/Middleware/RememberFromCookie.php:52
57. Flarum\Http\Middleware\RememberFromCookie->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
58. Laminas\Stratigility\Next->handle() /wwwroot/vendor/flarum/core/src/Http/Middleware/StartSession.php:61
59. Flarum\Http\Middleware\StartSession->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
60. Laminas\Stratigility\Next->handle() /wwwroot/vendor/flarum/core/src/Http/Middleware/CollectGarbage.php:46
61. Flarum\Http\Middleware\CollectGarbage->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
62. Laminas\Stratigility\Next->handle() /wwwroot/vendor/flarum/core/src/Http/Middleware/ParseJsonBody.php:28
63. Flarum\Http\Middleware\ParseJsonBody->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
64. Laminas\Stratigility\Next->handle() /wwwroot/vendor/flarum/core/src/Http/Middleware/HandleErrors.php:57
65. Flarum\Http\Middleware\HandleErrors->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
66. Laminas\Stratigility\Next->handle() /wwwroot/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php:84
67. Laminas\Stratigility\MiddlewarePipe->process() /wwwroot/vendor/middlewares/request-handler/src/RequestHandler.php:84
68. Middlewares\RequestHandler->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
69. Laminas\Stratigility\Next->handle() /wwwroot/vendor/middlewares/base-path-router/src/BasePathRouter.php:101
70. Middlewares\BasePathRouter->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
71. Laminas\Stratigility\Next->handle() /wwwroot/vendor/laminas/laminas-stratigility/src/Middleware/OriginalMessages.php:42
72. Laminas\Stratigility\Middleware\OriginalMessages->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
73. Laminas\Stratigility\Next->handle() /wwwroot/vendor/middlewares/base-path/src/BasePath.php:73
74. Middlewares\BasePath->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
75. Laminas\Stratigility\Next->handle() /wwwroot/vendor/flarum/core/src/Http/Middleware/ProcessIp.php:24
76. Flarum\Http\Middleware\ProcessIp->process() /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php:61
77. Laminas\Stratigility\Next->handle() /wwwroot/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php:84
78. Laminas\Stratigility\MiddlewarePipe->process() /wwwroot/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php:73
79. Laminas\Stratigility\MiddlewarePipe->handle() /wwwroot/vendor/laminas/laminas-httphandlerrunner/src/RequestHandlerRunner.php:96
80. Laminas\HttpHandlerRunner\RequestHandlerRunner->run() /wwwroot/vendor/flarum/core/src/Http/Server.php:44
81. Flarum\Http\Server->listen() /wwwroot/public/index.php:26
(6) 关闭小窗,点击导航栏的 Log In 链接
(7) 输入第 3 步填写的帐户和密码,成功登录
(8) 页面顶部出现横幅如下(对邮箱地址进行了处理):
(9) 检查第 3 步填写的邮箱,没有收到任何与帐户激活相关的邮件
(10) 点击 RESEND CONFIRMATION EMAIL,页面左下角出现以下提示:
(11) 点击第 10 步弹出信息的 DEBUG 链接,显示内容如下:
POST https://dev.0xffff.one/api/users/5/send-confirmation
Swift_TransportException: Expected response code 220 but got an empty response in /wwwroot/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php:447
Stack trace:
#0 /wwwroot/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php(360): Swift_Transport_AbstractSmtpTransport->assertResponseCode('', Array)
#1 /wwwroot/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php(147): Swift_Transport_AbstractSmtpTransport->readGreeting()
#2 /wwwroot/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php(50): Swift_Transport_AbstractSmtpTransport->start()
#3 /wwwroot/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer.php(65): Swift_Transport_SendmailTransport->start()
#4 /wwwroot/vendor/illuminate/mail/Mailer.php(521): Swift_Mailer->send(Object(Swift_Message), Array)
#5 /wwwroot/vendor/illuminate/mail/Mailer.php(288): Illuminate\Mail\Mailer->sendSwiftMessage(Object(Swift_Message))
#6 /wwwroot/vendor/illuminate/mail/Mailer.php(212): Illuminate\Mail\Mailer->send(NULL, Array, Object(Closure))
#7 /wwwroot/vendor/flarum/core/src/Mail/Job/SendRawEmailJob.php(34): Illuminate\Mail\Mailer->raw('Hey bobby285274...', Object(Closure))
#8 /wwwroot/vendor/illuminate/container/BoundMethod.php(36): Flarum\Mail\Job\SendRawEmailJob->handle(Object(Illuminate\Mail\Mailer))
#9 /wwwroot/vendor/illuminate/container/Util.php(40): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#10 /wwwroot/vendor/illuminate/container/BoundMethod.php(93): Illuminate\Container\Util::unwrapIfClosure(Object(Closure))
#11 /wwwroot/vendor/illuminate/container/BoundMethod.php(37): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Container\Container), Array, Object(Closure))
#12 /wwwroot/vendor/illuminate/container/Container.php(611): Illuminate\Container\BoundMethod::call(Object(Illuminate\Container\Container), Array, Array, NULL)
#13 /wwwroot/vendor/illuminate/bus/Dispatcher.php(128): Illuminate\Container\Container->call(Array)
#14 /wwwroot/vendor/illuminate/pipeline/Pipeline.php(128): Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}(Object(Flarum\Mail\Job\SendRawEmailJob))
#15 /wwwroot/vendor/illuminate/pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Flarum\Mail\Job\SendRawEmailJob))
#16 /wwwroot/vendor/illuminate/bus/Dispatcher.php(132): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#17 /wwwroot/vendor/illuminate/queue/CallQueuedHandler.php(118): Illuminate\Bus\Dispatcher->dispatchNow(Object(Flarum\Mail\Job\SendRawEmailJob), false)
#18 /wwwroot/vendor/illuminate/pipeline/Pipeline.php(128): Illuminate\Queue\CallQueuedHandler->Illuminate\Queue\{closure}(Object(Flarum\Mail\Job\SendRawEmailJob))
#19 /wwwroot/vendor/illuminate/pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Flarum\Mail\Job\SendRawEmailJob))
#20 /wwwroot/vendor/illuminate/queue/CallQueuedHandler.php(120): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#21 /wwwroot/vendor/illuminate/queue/CallQueuedHandler.php(70): Illuminate\Queue\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\Queue\Jobs\SyncJob), Object(Flarum\Mail\Job\SendRawEmailJob))
#22 /wwwroot/vendor/illuminate/queue/Jobs/Job.php(98): Illuminate\Queue\CallQueuedHandler->call(Object(Illuminate\Queue\Jobs\SyncJob), Array)
#23 /wwwroot/vendor/illuminate/queue/SyncQueue.php(43): Illuminate\Queue\Jobs\Job->fire()
#24 /wwwroot/vendor/flarum/core/src/Api/Controller/SendConfirmationEmailController.php(87): Illuminate\Queue\SyncQueue->push(Object(Flarum\Mail\Job\SendRawEmailJob))
#25 /wwwroot/vendor/flarum/core/src/Http/RouteHandlerFactory.php(38): Flarum\Api\Controller\SendConfirmationEmailController->handle(Object(Laminas\Diactoros\ServerRequest))
#26 /wwwroot/vendor/flarum/core/src/Http/Middleware/ExecuteRoute.php(27): Flarum\Http\RouteHandlerFactory->Flarum\Http\{closure}(Object(Laminas\Diactoros\ServerRequest), Array)
#27 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\ExecuteRoute->process(Object(Laminas\Diactoros\ServerRequest), Object(Closure))
#28 /wwwroot/vendor/flarum/core/src/Api/Middleware/ThrottleApi.php(33): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#29 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Api\Middleware\ThrottleApi->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#30 /wwwroot/vendor/flarum/core/src/Http/Middleware/CheckCsrfToken.php(44): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#31 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\CheckCsrfToken->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#32 /wwwroot/vendor/flarum/core/src/Http/Middleware/ResolveRoute.php(67): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#33 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\ResolveRoute->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#34 /wwwroot/vendor/flarum/core/src/Http/Middleware/SetLocale.php(50): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#35 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\SetLocale->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#36 /wwwroot/vendor/flarum/core/src/Http/Middleware/AuthenticateWithHeader.php(55): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#37 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\AuthenticateWithHeader->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#38 /wwwroot/vendor/flarum/core/src/Http/Middleware/AuthenticateWithSession.php(32): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#39 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\AuthenticateWithSession->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#40 /wwwroot/vendor/flarum/core/src/Http/Middleware/RememberFromCookie.php(52): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#41 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\RememberFromCookie->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#42 /wwwroot/vendor/flarum/core/src/Http/Middleware/StartSession.php(61): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#43 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\StartSession->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#44 /wwwroot/vendor/flarum/core/src/Api/Middleware/FakeHttpMethods.php(29): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#45 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Api\Middleware\FakeHttpMethods->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#46 /wwwroot/vendor/flarum/core/src/Http/Middleware/ParseJsonBody.php(28): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#47 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\ParseJsonBody->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#48 /wwwroot/vendor/flarum/core/src/Http/Middleware/HandleErrors.php(57): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#49 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\HandleErrors->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#50 /wwwroot/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(84): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#51 /wwwroot/vendor/middlewares/request-handler/src/RequestHandler.php(84): Laminas\Stratigility\MiddlewarePipe->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#52 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Middlewares\RequestHandler->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#53 /wwwroot/vendor/middlewares/base-path-router/src/BasePathRouter.php(101): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#54 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Middlewares\BasePathRouter->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#55 /wwwroot/vendor/laminas/laminas-stratigility/src/Middleware/OriginalMessages.php(42): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#56 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Laminas\Stratigility\Middleware\OriginalMessages->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#57 /wwwroot/vendor/middlewares/base-path/src/BasePath.php(73): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#58 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Middlewares\BasePath->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#59 /wwwroot/vendor/flarum/core/src/Http/Middleware/ProcessIp.php(24): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#60 /wwwroot/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\ProcessIp->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#61 /wwwroot/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(84): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#62 /wwwroot/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(73): Laminas\Stratigility\MiddlewarePipe->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\EmptyPipelineHandler))
#63 /wwwroot/vendor/laminas/laminas-httphandlerrunner/src/RequestHandlerRunner.php(96): Laminas\Stratigility\MiddlewarePipe->handle(Object(Laminas\Diactoros\ServerRequest))
#64 /wwwroot/vendor/flarum/core/src/Http/Server.php(44): Laminas\HttpHandlerRunner\RequestHandlerRunner->run()
#65 /wwwroot/public/index.php(26): Flarum\Http\Server->listen()
#66 {main}
(12) 再次检查第 3 步填写的邮箱,依然没有收到任何与帐户激活相关的邮件
期望的结果:
注册表单提交后收到帐户激活邮件且使用该邮件成功激活帐户,帐户激活后回贴、发帖功能正常使用。
浏览器:
Firefox 87.0
补充说明:
无法发帖演示如下:
无法回帖演示如下(操作所在页面为 dev.0xffff.one/d/1):
在测试站注册多个账号(bobby285271
bobby285272
bobby285273
bobby285274
)填写 QQ、126、使用个人域名的阿里企业邮箱进行测试,均可复现上述情况(前三个帐号为三天前注册,至今未收到邮件)。在主站下通过『更换邮箱』测试发信功能,可以顺利收到 0xffff AT izgq DOT net 发来的邮件并顺利完成邮箱验证。
其它功能暂未发现问题(包括更换头像、更改站点语言和 Follow 帖子)。
See https://discuss.flarum.org/d/32899-flarum-v180-released
Would need to check all the customization is work normally.
现象:
直接打开指向某楼层的链接,途中因为浏览器正在下载前面楼层的帖子的图片,帖子发生高度变化,从而使得页面发生抖动,导致滚动位置不精确
解决思路:
数据库增加帖子高度的额外字段,提交帖子时检测图片的高度并保存,再在渲染时指定容器的 min-height
Like Notion's backlinks feature
目前帖子在添加内部链接仍然会添加 target="_blank"
,手机端点击内链跳转导致整体刷新,体验较差。
帖子例子:
计算机相关专业入门指引专题帖 - 开篇 & 索引 - 0xFFFF
希望可以判断这种情况,避免页面的刷新(类似 Pjax 的概念)。
逻辑的位置:core/src/Formatter/Formatter.php
$dom = $configurator->tags['URL']->template->asDOM();
foreach ($dom->getElementsByTagName('a') as $a) {
$a->setAttribute('target', '_blank');
$a->setAttribute('rel', 'nofollow');
}
$dom->saveChanges();
根据 s9e/TextFormatter 文档,此处解析用到了 XSLT 模版语言 作为匹配,关键在于写出新的模版,替换掉原来的 URL 的模版。
目前设想:可以用 XSLT 的条件判断的功能实现。
btw: 这一修改的经验或许可以对 LaTeX 插件的研究会有帮助。
代码修改 push 后,需要同步至生产环境服务器,进行依赖更新,清除缓存等操作
https://discuss.flarum.org/d/30805-flarum-v130-released
需注意 flarum/core 改名为 flarum/framework 的 monorepo
https://github.com/flarum/framework
论坛现在通过/(/)来显示公式,平时使用markdown都是$$,希望会得到优化
把首页缓存到 Service Worker 以后,可以实现秒开的效果,减小白屏时间,类似 YouTube 的首页。
但有个问题,首页是 PHP 渲染生成的,包含了用户的 Session 等信息,不能简单地抽出来。
需要将 PHP 原始硬编码到 HTML 的部分抽离出来,做一个轻量的 App Shell 预置到缓存中。
At user profile page, there are some code works to calculating the main color of avatar and apply to user's background color.
After we migrate the avatar storage to Cloudflare R2, when cache is not disabled, it shows error:
when we disable the cache in Dev tools, it will back to normal
It is because some issue about Vary: origin
header on Cloudflare R2 / S3, the CORS request and non-CORS request hit the same browser cache instance.
more detail: https://zhuanlan.zhihu.com/p/38972475
几种方式:
(微信自带分享暂不可能,可以针对微信与QQ优化,提醒用户浏览器打开
测试用例:https://drive.google.com/file/d/10Lz4XA1JBE9ceA3ioKiDRqjEfsYWnoOn/view?usp=sharing
结果:
另排除图片文件大小原因,但不确定跟尺寸有没关系
众所周知原因 cdn.jsdelivr.net 被干,导致大陆 emoji 图裂掉,需要替换成合适的 cdn(推荐字节的)
Discord record
群友反馈,默认生成拼音 slug 有点长,考虑给用户一个自定义 url 的选项
实现角度可以参考:https://github.com/clarkwinkelmann/flarum-ext-manual-discussion-slug
重点:
中文站内搜索目前有两种方案:
所以可以先想办法把 xunsearch 插件移植到 beta.16 上
Originally posted by @zgq354 in #15 (comment)
Current situation: DevContainer requires pulling an image at startup, and building directly from the Dockerfile is time-consuming. Currently, a separate dev-container branch is used to build the image through GitHub Action. This approach can be challenging when resolving conflicts after merging changes. Therefore, there is a need to optimize the process.
Branch main
:
https://github.com/0xffff-one/0xffff-flarum/blob/50bbe59/.devcontainer/docker-compose.yml#L5
services:
app:
image: ghcr.io/0xffff-one/0xffff-flarum-devcontainer:latest
Branch dev-container
:
https://github.com/0xffff-one/0xffff-flarum/blob/d4f91f7/.devcontainer/docker-compose.yml#L5
services:
app:
build:
context: .
dockerfile: Dockerfile
A possible solution:
In the CI process of the main branch, the image
could be replaced with build
/ dockerfile
by applying a patch or similar method, and then continue with the build process.
for more details at 0xFFFF Discord Channel:
https://discord.com/channels/835068992006651934/1103181702865629264
考虑如果代码太长,帖子也相应变长,不太好翻。希望可以加个代码块折叠功能,建议可选如下:
https://github.com/flarum/auth-github
这个扩展貌似不维护了,需要另外支持
Originally posted by @zgq354 in #15 (comment)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.