1257 Commits

Author SHA1 Message Date
Franz Liedke
2d4dc02ca1
Pass container into apps, adapt path matching 2018-08-23 22:17:37 +02:00
Franz Liedke
869ec54bd0
Load middleware stacks lazily
This way, the forum middleware does not need to be loaded for
API requests, and vice-versa.
2018-08-22 09:20:47 +02:00
Franz Liedke
59b1ca9b7c
Implement request handler for maintenance mode 2018-08-22 09:20:00 +02:00
Franz Liedke
7439069fe2
Use more honest method names 2018-08-22 07:58:50 +02:00
Franz Liedke
973fbcf17b
Instantiate DispatchRoute manually
Since we are already providing the first and only argument
manually, we might as well instantiate the object manually.
Same effect, same coupling, less code.
2018-08-22 07:58:50 +02:00
Franz Liedke
fb5740926a
Split SessionServiceProvider from UserServiceProvider
This lets us register the former during installation, where the
latter is not yet registered.

That, in turn, means we can finally re-enable the StartSession
middleware in the installer app, which we need to log in the new
admin user when installation is complete.
2018-08-22 07:58:50 +02:00
Franz Liedke
32ad926cbc
One BusServiceProvider is enough 2018-08-22 07:58:50 +02:00
Franz Liedke
626d16de6f
Use zend-httphandlerrunner for marshalling requests and returning responses
Since Diactoros 1.8, the emitter and server classes have been
deprecated. They can be replaced by using this new package
directly.
2018-08-22 07:58:50 +02:00
Franz Liedke
0222692c53
Console Installer: Rely less on service providers
Most things we need, we can instantiate directly.

This means we have to do less tweaking in service providers that
are meant to provide services to a complete Flarum application
(that has already been installed properly), to make them work with
the uninstalled app.

The uninstalled app (the "installer") can now do only the
bootstrapping it needs to build a light-weight web and console
application, respectively.
2018-08-22 07:58:50 +02:00
Franz Liedke
b4b72fe62f
Get rid of some Application methods
These are not necessary to be available so broadly. In fact, they
seem to make it too easy to use them, which has lead to some sub-
optimal architecture decisions.

Their equivalents have been moved to the classes where used.
2018-08-22 07:58:50 +02:00
Franz Liedke
5b821b21b1
Split up Site into several classes
Depending on the state of the Flarum installation (installed, not
installed, currently upgrading, maintenance mode), we should enable
different sets of service providers.

For example, during installation we should not resolve a setting
repository from the container. This new architecture lets us do so,
but we can easily (and cleanly) register a different implementation
during installation.

This should prevent problems such as #1370 in the future.
2018-08-22 07:58:50 +02:00
Franz Liedke
7a6e208554
Split up HandleErrors middleware into distinct classes
These are completely distinct functionalities, toggled through the
system-wide debug flag. By moving the selection of the middleware
to use to the place where the middleware pipe is built, we make
the middleware itself be unaware of these flags. The two classes
are more focused on what they are doing, with the constructor
dependencies clearly representing their requirements.

In addition, this means we can just use the HandleErrorsWithWhoops
middleware in the installer, which means we do not need to worry
about how to inject a SettingsRepositoryInterface implementation
when flarum is not yet set up.
2018-08-22 07:58:50 +02:00
David Sevilla Martín
ca16a23383 Installer: add check for file existence & fix path resolving (#1397) 2018-08-19 23:40:37 +02:00
Toby Zerner
195f77ff10
Apply fixes from StyleCI (#1551)
[ci skip] [skip ci]
2018-08-18 12:13:40 +09:30
Toby Zerner
5f83285442 Add extension JS as a file to allow sourcemap detection
Fixes #1538
2018-08-18 12:13:17 +09:30
Franz Liedke
c16ddf24f2
Add tokenizer to PHP extension requirements
Refs flarum/flarum.github.io#73.
2018-08-14 22:53:12 +02:00
Edward Betts
641079b3fe Correct spelling mistakes. (#1546) 2018-08-14 21:46:53 +02:00
David Sevilla Martín
40e4c0acdd Fix wrong permission in UserPolicy#find (#1536) 2018-08-13 06:45:56 +09:30
Charlie
ef9ed7f4fa Dispatch the Deserializing event in Admin Content (#1532)
* Dispatch the Deserializing event

* Apply fixes from StyleCI (#1)
2018-08-11 17:15:11 +09:30
Franz Liedke
24fd2f32c7
Service Provider: Move loadViewsFrom() to boot()
This method relies on the "view" being bound in the IoC container.
This is only guaranteed after all register() methods have run, thus
it should be done in boot().
2018-08-03 00:53:39 +02:00
Franz Liedke
cfc207f255
Apply fixes from StyleCI (#1518)
[ci skip] [skip ci]
2018-07-23 16:25:12 +02:00
Franz Liedke
d4a80eae5d
Replace Assets with Frontend extender
This extender allows registering both assets and simple GET routes
with frontend instances.

See #851.
2018-07-23 16:24:00 +02:00
Toby Zerner
c562302161 Don't save in the model 2018-07-21 21:28:44 +09:30
David Sevilla Martín
d6414cfb44 Properly set comments_count and discussions_count (#1436) 2018-07-17 19:02:37 +02:00
Franz Liedke
85ceda0b0b
Remove another unused parameter 2018-07-16 15:48:48 +02:00
Franz Liedke
dc7c31e1c2
Remove incorrect attribute 2018-07-16 15:48:48 +02:00
Franz Liedke
177ac74596
Apply fixes from StyleCI (#1508)
[ci skip] [skip ci]
2018-07-16 15:13:21 +02:00
Franz Liedke
c76d9e1298
Move initial permission setup to migrations
Refs #1466.
2018-07-16 15:12:46 +02:00
Franz Liedke
dee54a008f
Apply fixes from StyleCI (#1507)
[ci skip] [skip ci]
2018-07-16 01:44:50 +02:00
Franz Liedke
551ca23267
Discussion HTML: Add a canonical URL
Refs #358 and #1140.
2018-07-16 01:43:06 +02:00
Franz Liedke
3d845d5730
Discussion HTML: Fix generation of next/prev URLs 2018-07-16 01:42:36 +02:00
Franz Liedke
9b03f8c71a
Make post filtering work with database prefixes 2018-07-16 01:22:13 +02:00
Franz Liedke
ce90d2bbdd
Installer: Get rid of an instance variable
Leftover from PR #1405.
2018-07-16 00:33:32 +02:00
Franz Liedke
6e5b0f5289
Formatter: Tweak minifier setup
See discussion in PR #1457.
2018-07-14 22:57:20 +02:00
Sajjad Hashemian
fba31995b1 Upgrade text formatter (#1457)
* upgrade TextFormatter

* remove finalize options

* cleanup JsCompiler

* simplify Formatter

* refactor Formatter cache

* minify formatter js

* remove Closure Compiler
2018-07-14 22:22:14 +02:00
AFR
034b82f4d4 Create new hidePosts permission (#1466) 2018-07-14 22:15:40 +02:00
Toby Zerner
0e73785498
Frontend refactor (#1471)
Refactor Frontend + Asset code

- Use Laravel's Filesystem component for asset IO, meaning theoretically
  assets should be storable on S3 etc.

- More reliable checking for asset recompilation when debug mode is on,
  so you don't have to constantly delete the compiled assets to force
  a recompile. Should also fix issues with locale JS files being
  recompiled with the same name and cached.

- Remove JavaScript minification, because it will be done by Webpack
  (exception is for the TextFormatter JS).

- Add support for JS sourcemaps.

- Separate frontend view and assets completely. This is an important
  distinction because frontend assets are compiled independent of a
  request, whereas putting together a view depends on a request.

- Bind frontend view/asset factory instances to the container (in
  service providers) rather than subclassing. Asset and content
  populators can be added to these factories – these are simply objects
  that populate the asset compilers or the view with information.

- Add RouteHandlerFactory functions that make it easy to hook up a
  frontend controller with a frontend instance ± some content.

- Remove the need for "nojs"

- Fix cache:clear command

- Recompile assets when settings/enabled extensions change
2018-06-30 12:31:12 +09:30
Daniel Klabbers
0f5ddc1c43 phpversion minimum requirement changed in wrong location for installation 2018-06-28 11:40:34 +02:00
Daniel Klabbers
eaf98ccfc5 Revert "have install command demand php 7.1 too"
This reverts commit 9c7cc0548e704f726e875dc406805feece9ed077.
2018-06-28 11:39:19 +02:00
Daniel Klabbers
9c7cc0548e have install command demand php 7.1 too 2018-06-28 11:23:04 +02:00
Toby Zerner
b3f8379a15
Allow a single extender to be returned (#1469)
Casting an object to an array does not have the intended effect of
wrapping the object in an array. Instead we need to explicitly check
if the returned value is an array or not.
2018-06-22 18:10:54 +09:30
Toby Zerner
805768a9e0
[WIP] JS Extender API foundation (#1468)
* Run extenders exported by extensions
* Add some basic extenders
* Patch Mithril as the very first thing so extension code can run safely
* Load the payload into the app before booting extensions
* Setup default routes before booting extensions
2018-06-22 10:49:46 +09:30
Toby Zerner
520e1550d1
Merge event listener registration 2018-06-20 23:37:27 +02:00
Toby Zerner
79b00cb94f
Rename and improve FormatterConfiguration extender
In the future we may have multiple Formatters, so by moving the config
callback to its own instance method we can leave the constructor
available to specify which formatter (like Assets and Routes). This
format also allows for other methods to be added.

Additionally, this adds logic to automatically flush the Formatter cache
whenever the extension is enabled or disabled.
2018-06-20 23:37:27 +02:00
Toby Zerner
3f683dd6ee
Webpack (#1367)
* Replace gulp with webpack and npm scripts for JS compilation
* Set up Travis CI to commit compiled JS
* Restructure `js` directory; only one instance of npm, forum/admin are "submodules"
* Refactor JS initializers into Application subclasses
* Maintain partial compatibility API (importing from absolute paths) for extensions
* Remove minification responsibility from PHP asset compiler
* Restructure `less` directory
2018-06-20 13:20:31 +09:30
Toby Zerner
2bc7c4134a Add comment explaining extension boot process 2018-06-15 19:25:40 +09:30
Toby Zerner
050496a20e Make ExtensionManager a singleton 2018-06-15 19:25:15 +09:30
Toby Zerner
3b87778fbb Prevent @ character used in searches from crashing MySQL 🙄 2018-06-15 19:24:23 +09:30
Toby Zerner
569e6c9a92 Escape string used in LIKE query 2018-06-15 19:19:43 +09:30
Toby Zerner
c498e68530 Use imported class name 2018-06-15 19:18:47 +09:30