Commit Graph

1388 Commits

Author SHA1 Message Date
Franz Liedke
2b6ee50c58
Merge pull request #1396 from flarum/writable-path-check-fix
public path should not be writable, but base path should
2018-03-22 08:22:25 +01:00
David Sevilla Martín
baa11acfa8
Fix "Debug mode" in InfoCommand not showing 2018-03-21 20:00:14 -04:00
Daniël Klabbers
c60d6e9dee
public path should not be writable, but base path should 2018-03-21 20:52:49 +01:00
Franz Liedke
0cf351edb9
List debug mode setting in info output 2018-03-19 23:28:05 +01:00
Franz Liedke
fdbf0c86a1
Return empty response
Without this, the new version of Stratigility complained about no
response being returned. Old versions were more graceful here, but
this is certainly more correct.
2018-03-19 23:06:27 +01:00
Franz Liedke
8d2d987680
Split up Locale extender
Now we have two extenders:
- `Extend\LanguagePack` is the "convention over configuration" loader
  for complete language packs.
- `Extend\Locales` can be used to load files (by locale) from a given
  directory - useful for extensions that bring along their own locales
  in multiple different languages.

Refs #851.
2018-03-19 01:07:59 +01:00
Franz Liedke
bb49e24ffe
Bind session handling to request lifecycle
With this change, session objects are no longer instantiated
globally, but instead created within a middleware during the
request lifecycle.

In addition, session garbage collection is integrated with
the already existing middleware for this purpose.
2018-03-18 15:58:31 +01:00
Toby Zerner
5672819549
Use Illuminate Session component instead of Symfony
Symfony's component relies on PHP's native session functionality, which
is not ideal. It automatically sets its own cookie headers, resulting in
this issue: https://github.com/flarum/core/issues/1084#issuecomment-364569953

The Illuminate component is more powerful and has a simpler API for
extension with other drivers and such, and fits in nicely with other
components we use (the majority of which are from Illuminate).
2018-03-18 14:43:44 +01:00
Franz Liedke
5645bcbf9c
Apply fixes from StyleCI (#1391)
[ci skip] [skip ci]
2018-03-18 13:53:44 +01:00
Franz Liedke
9d30be1617
Update Stratigility, use http-interop middleware 2018-03-18 13:52:16 +01:00
Daniël Klabbers
0c5c322cb4
fixes the broken hash & hash.driver ioc binding which is part of 5.6 2018-03-08 14:25:25 +01:00
Clark Winkelmann
aba22b9119
Remove unused $lifetime variable 2018-03-07 01:30:23 +01:00
Franz Liedke
26dfc8ae21
Apply fixes from StyleCI (#1381)
[ci skip] [skip ci]
2018-03-04 01:18:49 +01:00
Franz Liedke
db7cd71f19
Move logic to Extension class
The gathering and execution of extenders can actually be done here
in the `Extension` class. This way, the `ExtensionManager` only
deals with the question of which extensions are enabled, the
`Extension` class actually extends the core application, and the
service provider simply calls a method, without having to know
about internals.
2018-03-04 01:16:50 +01:00
Toby Zerner
2967b5d106 Give Extenders information about which Extension they belong to 2018-03-04 10:13:12 +10:30
Toby Zerner
571938a677 Update core container aliases 2018-02-24 10:37:21 +10:30
AFR
1a2df2d581 FontAwesome v5.0.6 (#1372)
* Update FontAwesome to v5.0.6

* Adapt DiscussionListItem-count icon to match FontAwesome 5 syntax

* Change icon name to match FontAwesome 5.0.6 fas icon

* Add font type prefix parameter to icon helper

* Add Enable Icon Prefix to show icon in Extension Page

* Fix invalid icon behavior

* Change icon name to match FontAwesome 5.0.6 far icon

* Use iconPrefix property on component

* Use full icon class name

* Update icon helper docblock

* Full icon class syntax
2018-02-23 23:42:00 +01:00
Marcel Pokrandt
0f554585ac add message to Dispatch exceptions (#1376)
Exceptions thrown while attempting to dispatch routes are now informing the exact value that was incorrect; url for not found routes and the method when the method was invalid.
2018-02-21 11:28:45 +01:00
Franz Liedke
0b478379fc
Apply fixes from StyleCI (#1371)
[ci skip] [skip ci]
2018-02-15 16:57:18 +01:00
Franz Liedke
ba96f311a9
Refactor MIME type guessing to work without any PHP extension
Closes #1241.
2018-02-15 16:40:41 +01:00
Toby Zerner
34588a74e2
Merge pull request #1363 from clarkwinkelmann/extension-rollback
Add extension rollback command
2018-02-13 07:18:00 +10:30
Clark Winkelmann
58ffa27bfb
Rename to reset and make extension an option 2018-02-11 20:03:54 +01:00
Franz Liedke
f0cea11e79
API: Provide forum info under /
Closes #875.
2018-02-11 16:40:05 +01:00
Toby Zerner
160493e725 fire -> dispatch
As per Illuminate\Contracts\Events\Dispatcher
2018-02-10 12:09:35 +10:30
Clark Winkelmann
5561e28286
Fix formatting 2018-02-09 18:42:43 +01:00
Clark Winkelmann
c9cfcee12a
Fix formatting 2018-02-09 18:41:51 +01:00
Clark Winkelmann
479fafbf5c
Add extension rollback command 2018-02-09 18:32:44 +01:00
Johann Rodríguez
7721288ac6 No slug? Then no '-' separator! (#1351)
* Stop using slug separator when there is no slug

* Changing as per upstream requirements
2018-02-09 07:22:50 +10:30
Toby Zerner
0ab1f2cfe7 Fix regression: set actor before eager loading user state 2018-02-08 07:08:39 +10:30
Toby Zerner
322a84f516
Improve search performance (#1339)
* Improve fulltext gambit

* Only search in visible posts

This change relies on the `visibility-scoping` branch to be merged.

* Change posts table to use InnoDB engine

Doing a JOIN between an InnoDB table (discussions) and a MyISAM table
(posts) is very very (very) bad for performance. FULLTEXT indexes are
fully supported in InnoDB now, and it is a superior engine in every
other way, so there is no longer any reason to be using MyISAM.

* Use ::class

* Only search for comment posts

* Add fulltext index to discussions.title

* Fix migration not working if there is a table prefix

* Update frontend appearance

* Apply fixes from StyleCI

[ci skip] [skip ci]

* Show search result excerpts on mobile
2018-02-08 06:38:08 +10:30
Daniel Klabbers
80ec3b5e17 Improved the console configuring event to support any type of console command to be added 2018-02-07 13:58:31 +01:00
Clark Winkelmann
636e965873 Add console configuration event (#1349)
* Add console configuration event

* Fix comment formatting
2018-02-07 21:49:08 +10:30
Daniel Klabbers
419adb748b validation requires nullable now in order to allow null values to pass the validation 2018-02-02 11:38:06 +01:00
Clark Winkelmann
2eae968a70 Assert permission when updating avatar 2018-01-31 16:36:42 +01:00
Toby Zerner
7651907f56 Don't break compatibility with extensions that return a function name
eg. s9e/mediaembed
2018-01-31 07:20:49 +10:30
Toby Zerner
557a65aadd Grant users permission to view empty discussions if they can edit posts
This fixes an issue where unapproved discussions (via
flarum-ext-approval) that were rejected became invisible to the user.

This solution is imperfect and some more substantial thought into how
flarum-ext-approval works is required in the future.
2018-01-30 11:14:25 +10:30
Toby Zerner
ad4bd3d001
Overhaul model visibility scoping (#1342)
* Overhaul the way model visibility scoping works

- Previously post visibility scoping required concrete knowledge of the
  parent discussion, ie. you needed a Discussion model on which you
  would call `postsVisibleTo($actor)`. This meant that to fetch posts
  from different discussions (eg. when listing user posts), it was a
  convoluted process, ultimately causing #1333.

  Now posts behave like any other model in terms of visibility scoping,
  and you simply call `whereVisibleTo($actor)` on a Post query. This
  scope will automatically apply a WHERE EXISTS clause that scopes the
  query to only include posts whose discussions are visible too. Thus,
  fetching posts from multiple discussions can now be done in a single
  query, simplifying things greatly and fixing #1333.

- As such, the ScopePostVisibility event has been removed. Also, the
  rest of the "Scope" events have been consolidated into a single event,
  ScopeModelVisibility. This event is called whenever a user must have
  a certain $ability in order to see a set of discussions. Typically
  this ability is just "view". But in the case of discussions which have
  been marked as `is_private`, it is "viewPrivate". And in the case of
  discussions which have been hidden, it is "hide". etc.

  The relevant API on AbstractPolicy has been refined, now providing
  `find`, `findPrivate`, `findEmpty`, and `findWithPermission` methods.
  This could probably do with further refinement and we can re-address
  it once we get around to implementing more Extenders.

- An additional change is that Discussion::comments() (the relation
  used to calculate the cached number of replies) now yields "comments
  that are not private", where before it meant "comments that are
  visible to Guests". This was flawed because eg. comments in non-public
  tags are technically not visible to Guests.

  Consequently, the Approval extension must adopt usage of `is_private`,
  so that posts which are not approved are not included in the replies
  count. Fundamentally, `is_private` now indicates that a discussion/
  post should be hidden by default and should only be visible if it
  meets certain criteria. This is in comparison to non-is_private
  entities, which are visible by default and may be hidden if they don't
  meet certain criteria.

Note that these changes have not been extensively tested, but I have
been over the logic multiple times and it seems to check out.

* Add event to determine whether a discussion `is_private`

See https://github.com/flarum/core/pull/1153#issuecomment-292693624

* Don't include hidden posts in the comments count

* Apply fixes from StyleCI (#1350)
2018-01-27 09:57:16 +10:30
Franz Liedke
4b1a299b3c
Convert closures in arrays to Compat extenders as well
Refs #851.
2018-01-21 22:38:06 +01:00
Franz Liedke
fa14be591c
Use cursor() fetching when deleting many posts
Refs #1319.
2018-01-21 21:53:48 +01:00
Franz Liedke
072f4f89cb
Assets extender: Remove defaultAssets() method
See a7821a24a2 (r26990974).
2018-01-21 21:14:08 +01:00
Toby Zerner
ed3e833181 Fix docblocks 2018-01-21 08:28:15 +10:30
Toby Zerner
7f92838225 Fix Laravel 5.5 query scoping 2018-01-21 08:28:08 +10:30
Clark Winkelmann
d357364712 Rename method and attribute, and remove unnecessary attribute filtering 2018-01-11 23:05:26 +01:00
Clark Winkelmann
26449a64fe Merge remote-tracking branch 'upstream/master' into signup-fields-locking 2018-01-11 22:54:41 +01:00
Toby Zerner
ae2e07e94c Remove use of event priorities
Event priorities are no longer in Laravel - see dbbfc62bef

Updated the AbstractPolicy terminology to reflect the new behaviour,
which is that there is no guarantee that the catch-all methods will run
after all specific methods have run globally. This behaviour is only
guaranteed within the policy.
2018-01-11 14:10:37 +10:30
Toby Zerner
801d619a36 Fix docblock return type 2018-01-11 12:11:48 +10:30
Toby Zerner
0befe041c7 Use whereRaw instead of Expression 2018-01-11 11:56:18 +10:30
Toby Zerner
1c87c33d4d Use ::class, update some typehints 2018-01-11 11:55:57 +10:30
Franz Liedke
30a04e7bf9
Don't use invokables with Container::call() 2018-01-10 19:37:18 +01:00
Franz Liedke
0af97c427c
Re-introduce Compat extender
Turns out Container::call() does not work with invokable classes.
Thus, we need to wrap callables in a custom extender class to
support injecting any resolvable type-hint automatically.

Refs #851.
2018-01-10 19:32:57 +01:00
Franz Liedke
c6747b6910
Get rid of Compat extender
Now that we support any form of callable to be returned from the
bootstrap.php files, it is no longer needed.
2018-01-09 22:35:40 +01:00
Franz Liedke
1ce70eeb6e
Turn extenders into callables
This simplifies the API and gives extension developers more
flexibility, for a) maintaining backwards compatibility, and
b) doing advanced stuff that extenders do not allow.

Note that only extenders are guaranteed to work across
different versions of Flarum (once the API surface is stable).

See the discussion in https://github.com/flarum/core/pull/1335.
2018-01-09 20:49:51 +01:00
Daniel Klabbers
714775cfed fixed two typehints on migrations repository 2018-01-09 16:28:50 +01:00
Clark Winkelmann
f3e29ab801 Dispatch user events after password reset
Previously PasswordChanged was never sent
2018-01-09 03:44:06 +01:00
Franz Liedke
26e53fc51b
Tweak route registration extender: Use plural
This makes it more consistent with other existing extenders,
while also making registration of multiple routes more
comfortable for extension developers, and likely slightly
more performant. :-)
2018-01-07 19:50:49 +01:00
Willem de Groot
5af65dede1 Fix StyleCI spacing 2018-01-06 12:03:02 +01:00
Willem de Groot
e774baf32f Remove execute permissions from php/less files 2018-01-06 11:59:25 +01:00
Toby Zerner
2ac04aac8e Merge branch '0.1.0-beta.7' 2018-01-06 20:06:43 +10:30
Clark Winkelmann
c6aeeeb3c1 Always apply attributes from token when registering
The change introduced in #1033 transformed any identification attribute returned from an OAuth provider to just a default value.

When the identification attribute used by the provider is the email or username, this allowed the user to supply a different email or username and still getting an already-enabled account with the credentials he entered.

Skipping attributes with an existing value makes no sense here because it's a always a fresh user and values from AbstractOAuth2Controller::getIdentification() should always be enforced.
2018-01-06 20:04:42 +10:30
Toby Zerner
f247d8c2a6
Merge pull request #1335 from flarum/next-back-extenders
Start of PHP extenders API
2018-01-06 09:17:27 +10:30
Franz Liedke
0380536cb4
Add another newline before custom footer HTML 2018-01-05 23:46:38 +01:00
AFR
6dc96b38af Add Custom Footer HTML (#1315)
* Add Custom Footer HTML

Straight copy from Custom Header HTML

* Move Custom Footer HTML to exactly before `</body>` tag.

* Fix invalid class name

* Append CustomFooterHTML when preparing the view.

* Some consistency in placing the variable
2018-01-05 23:44:11 +01:00
Franz Liedke
8d049126d0
Add Route extender for registering routes with forum, admin or API 2018-01-03 23:19:45 +01:00
Franz Liedke
63be95fb8a
Admin: Set up all event listeners in one place
See discussion in #1273.
2018-01-03 20:23:05 +01:00
Franz Liedke
1d47047d45
Add FormatterConfiguration extender for extensions working with TextFormatter 2018-01-03 09:42:11 +01:00
Franz Liedke
4e30ad5891
Add Assets extender for frontend extensions 2018-01-03 09:42:11 +01:00
Franz Liedke
f4ad227576
Add Locale extender for language pack extensions 2018-01-03 09:42:11 +01:00
Franz Liedke
5b6d043f80
Resolve extenders from ExtensionManager
Loading the activated extensions now means retrieving an array of
extenders (classes that implement a certain type of extension of a core
feature in Flarum).

For now, the only existing extender is the Compat extender which is used
to handle old-style bootstrappers that simply return a closure that
receives all of its dependencies via auto injection.

In the future, extensions will be able to return an array of extender
instances from their bootstrapper instead. These extender classes will
be implemented in the next step.
2018-01-03 09:42:11 +01:00
Franz Liedke
c41e58531a
Deprecate remaining non-namespaced events
These will be replaced by etenders soon.
2018-01-03 09:42:11 +01:00
Franz Liedke
b760d113d2
Installation default data: Use more sensible defaults
Using .dev as a TLD for local development is discouraged, as at
least Chrome now enforces HTTPS for these domains.

As far as I know, by default, the MySQL root user does not have
a password on many platforms. I use it this way on my local
machine, and this makes it convenient to setup a local copy.
2018-01-03 09:41:46 +01:00
Franz Liedke
936f67e953
Use ::class instead of some hardcoded class names
This gives us better refactoring functionality in IDEs like
PhpStorm, and also more quickly surfaces typos through errors
about undefined classes. :)
2018-01-03 09:41:46 +01:00
Franz Liedke
3f7e7520b0
Clean up code, use PHP 7 feature :) 2018-01-03 09:41:46 +01:00
Clark Winkelmann
7ccb263926 Fix array_only usage 2018-01-02 00:27:13 +01:00
Toby Zerner
fe56f57e8f Fix order of array_first arguments
As per https://laravel.com/docs/5.3/upgrade (under "Arrays")
2018-01-02 09:48:50 +10:30
Clark Winkelmann
fa9d89d690 Prevent editing fields in sign up modal according to identification data 2018-01-02 00:13:33 +01:00
Toby Zerner
292fe06001 Re-add missing middleware 2018-01-01 10:45:26 +10:30
Toby Zerner
d807171c44 Fix URL generator usage 2017-12-29 21:29:04 +10:30
Toby Zerner
57a91c966d Fix view paths 2017-12-29 21:28:53 +10:30
Toby Zerner
0525f467c7 Fix class reference 2017-12-29 18:42:31 +10:30
Franz Liedke
b791790d2f
Fix comment 2017-12-28 22:47:13 +01:00
Toby Zerner
ac7d28ca58 Remove unused method 2017-12-27 16:17:35 +10:30
Toby Zerner
8a6344cfcf Fix some class names, clean up imports 2017-12-27 16:17:25 +10:30
Toby Zerner
a0621e85bf Fix order of array_first arguments
As per https://laravel.com/docs/5.3/upgrade (under "Arrays")
2017-12-26 20:38:15 +10:30
Franz Liedke
56231d61be
Move garbage collection into middleware
This prevents garbage collection to randomly break the installer:
before installation, the models that are being accessed have no
database connection.

Now, the middleware is only mounted into the forum's middleware
stack. I want API requests to have stable performance, and the
forum middleware stack is only mounted when Flarum is installed.
2017-12-21 12:23:34 +01:00
Franz Liedke
c8a1a5fcfa
Fix more incompatibilities with Laravel 5.5 2017-12-20 00:20:23 +01:00
Franz Liedke
8d5132fd5a
Disable HandleErrors middleware during installation
Temporary measure until we have a real fix in place.
2017-12-20 00:00:23 +01:00
Franz Liedke
6efe2ee91a
Fix previous commit
Prevent `flarum.config` from being bound in the container when the
software has not been installed yet.
2017-12-19 23:48:38 +01:00
Franz Liedke
bfd98e3371
DRY up loading of config 2017-12-19 23:16:06 +01:00
Toby Zerner
e9da1ba2f5 Remove Listener namespace
We may reverse this in the future, but for now just going for
consistency between domains (the majority do not use a Listener
namespace)
2017-12-19 18:59:14 +10:30
Toby Zerner
2b8c66354d Apply fixes from StyleCI
[ci skip] [skip ci]
2017-12-19 08:24:06 +00:00
Toby Zerner
4cf481355f Fix usage of UrlGenerator in notifications 2017-12-19 18:52:27 +10:30
Toby Zerner
2ec183778c Pick up config when setting a new base path 2017-12-19 18:38:00 +10:30
Daniel Klabbers
1b94ef90ea the admin service provider also has to use the new HandleError logic 2017-12-15 09:35:02 +01:00
Daniel Klabbers
183a22b5c5 - FilesystemInterface no longer needed in User related handlers
- FilesystemInterface conditional ioc binding moved to AvatarUploader
- User::getAvatarAtribute failed to use the UrlGenerator properly
2017-12-15 09:29:20 +01:00
Daniel Klabbers
654fca9c2c fixed the BasicFoo vs FooBasic serializer definition issue, prevented for future using ::class 2017-12-15 08:29:07 +01:00
Daniel Klabbers
7be01119f5 and another.. 2017-12-15 08:15:08 +01:00
Daniel Klabbers
28d4cff156 satisfying sci isnt enough for it, lets please it further 2017-12-15 08:14:15 +01:00
Daniel Klabbers
2aba61668c - satisfying styleci
- cleared the merge conflict in the phpdoc
- changed some string class names to use ::class
2017-12-15 08:10:32 +01:00
Daniël Klabbers
f65e4dcba3
merges 5.5 and master into next-back 2017-12-14 01:00:16 +01:00
Franz Liedke
c6ce172caa
Apply suggestions from StyleCI 2017-12-13 23:08:35 +01:00
Clark Winkelmann
d2f187716e Prevent saving invalid custom less (#1273)
* Prevent saving invalid custom less

* Fix formatting

* Fix formatting again

* Move custom less format check to its own listener

* Move listener to AdminServiceProvider

* Rename listener method
2017-12-13 22:39:09 +01:00
Daniël Klabbers
93aa3d77b5
re-using symfony translator 2017-12-13 21:45:55 +01:00
Toby Zerner
a0c95e6705 Filter out notifications with non-existent subjects
ref #1025 #1238. This should prevent the frontend from crashing when
opening the notifications menu, but we still need to make sure
notifications are deleted properly when subjects are deleted.
2017-12-13 15:54:16 +10:30
Toby Zerner
77c25ab725 Add infinite scrolling in the notifications list 2017-12-13 15:28:54 +10:30
Toby Zerner
3dcfe32b27 Extract admin dashboard statistics from core into an extension 2017-12-10 21:03:48 +10:30
Toby Zerner
617a76dda8 Fix PHP 7.2 warning 2017-12-10 21:02:47 +10:30
Toby Zerner
b806dc3db2 Move view logic into middleware 2017-11-29 22:25:57 +10:30
Toby Zerner
92de751154 Fix last commit 2017-11-29 22:22:14 +10:30
Toby Zerner
5b46ec801d Generate URL in the controller instead of the view 2017-11-29 22:20:06 +10:30
Toby Zerner
1ef9217f4d Basic implementation of dashboard widgets, statistics
Currently not user-customizable. Just needed to display statistics for a
client, so figured I'd make a start at this. Nothing too fancy for now,
but I'm sure some people will be happy to have this information at their
fingertips.
2017-11-29 17:19:20 +10:30
Toby Zerner
79fee3686f More precise permission check for email gambit 2017-11-29 17:02:49 +10:30
Toby Zerner
8edc8223e5 Fix admin error handling 2017-11-29 16:10:22 +10:30
Daniël Klabbers
6280fb2498
reverting translator contract 2017-11-29 06:26:48 +01:00
Toby Zerner
ba769e0c7e Preserve return URL when confirming logout 2017-11-29 13:47:00 +10:30
Toby Zerner
ea2fc1ff8a Add a "return home" link to 404 errors 2017-11-29 13:23:25 +10:30
Toby Zerner
b7c1cc5cef New design for error pages. closes #252 2017-11-29 13:03:55 +10:30
Toby Zerner
e8a4e5e0ef Add log out confirmation if CSRF token is invalid. fixes #1282 2017-11-29 13:03:16 +10:30
Toby Zerner
295193eb3c Use HtmlResponse in AbstractHtmlController 2017-11-29 12:54:11 +10:30
Toby Zerner
a065c8e6f5 Make URLs more verbose 2017-11-29 12:53:39 +10:30
Toby Zerner
9392e1bec3 New design for reset password view 2017-11-29 12:53:06 +10:30
Toby Zerner
479e44dd04 Restructure views
- Use Laravel's view namespacing rather than the full file path
- Organise views into directories
2017-11-29 12:51:24 +10:30
Daniel Klabbers
c01268d9ae must be an empty line 2017-11-27 14:19:18 +01:00
Daniel Klabbers
f4fc245df4 re-added a precious line 2017-11-27 14:18:28 +01:00
Daniel Klabbers
ac0b4cb2d2 patched up the Scope implementation as requested 2017-11-27 14:17:17 +01:00
Daniel Klabbers
55b945f129 Using Core Translator in Locale Manager, type hinted its methods and removed unnecessary phpdoc 2017-11-27 14:03:45 +01:00
Daniel Klabbers
4d9e2335c7 pleasing the angry god Circle 2017-11-27 11:05:15 +01:00
Daniel Klabbers
642332ffe2 replaced the Symfony\Component\Translation\TranslationInterface with the Illuminate\Contracts\Translation\Translator, deprecating the Symfony version 2017-11-27 10:42:16 +01:00
Daniel Klabbers
7b2663e0bc fixed alias/reference loading for translation strings 2017-11-27 10:35:57 +01:00
Daniel Klabbers
e2d61d1aeb applied laravel contract 2017-11-27 09:49:19 +01:00
Toby Zerner
0aa74c987c Fix email gambit 2017-11-20 09:17:44 +10:30
Toby Zerner
a28dbccf1a Performance: Assign parent discussions to posts so they don't have to be reloaded 2017-11-12 21:14:19 +10:30
Toby Zerner
3c80612d80 Performance: Load only basic information about post discussion/users 2017-11-11 23:15:36 +10:30
Toby Zerner
dedcbae359 Performance: Load only basic information about terminal/relevant posts 2017-11-11 22:57:41 +10:30
Toby Zerner
9cc67fe312 Performance: Cache translation catalogue to avoid reparsing YAML 2017-11-11 22:45:38 +10:30
Toby Zerner
5f7060fb4a Performance: Assign parent discussion to posts so it doesn't have to be reloaded 2017-11-11 22:44:45 +10:30
Toby Zerner
15b573bd93 Update asset revision whenever custom LESS is changed
This should remove the need for a hard browser refresh whenever you
update the custom LESS.
2017-11-05 16:27:28 +10:30
Daniel Klabbers
0b1043c9d2 moved from boot to register 2017-11-02 10:52:52 +01:00
Daniel Klabbers
72c232d5a3 fixed the Bus command Handling forwarding the call to a matching Handler class 2017-11-02 10:48:33 +01:00
Franz Liedke
914b94b62d
Remove user bio feature (#1214)
The feature is very limited in scope, and we hope for community
extensions to take over this feature and make it much better.
2017-11-02 01:12:49 +01:00
Lukas
1b7cb3bec2 The CookieFactory now also works if no configuration exists (#1258)
* Returning the $default value if there's no config

This is especially important for the CookieFactory which accesses
the configuration before the application is installed

* Injecting the configuration values into the CookieFactory
2017-11-02 00:51:31 +01:00
Daniël Klabbers
55b763a570
fixed renamed interface for Scope 2017-11-01 22:12:56 +01:00
Daniel Klabbers
d7306dedb7 array_build => array_map 2017-11-01 17:20:12 +01:00
Daniel Klabbers
3eede757bb fixed symfony translator now using catalogues 2017-11-01 17:07:22 +01:00
Daniel Klabbers
a8f8ca7f87 fixed an issue where the mail provider would not be able to instantiate 2017-11-01 17:01:50 +01:00
Toby Zerner
40ebc13292 Only apply custom CSS and header HTML on forum, not admin 2017-10-25 13:40:57 +10:30
Toby Zerner
5a43f915cb Let avatarUrl attribute delete the avatar as well 2017-10-07 20:28:15 +10:30
Franz Liedke
cb92deee98
Fix namespace imports 2017-10-07 11:20:38 +02:00
Toby Zerner
bedf710768 Fix variable 2017-10-07 19:17:59 +10:30
Toby Zerner
3b1f8771c4 No need to set a remember cookie if only logging in for session 2017-10-07 17:51:30 +10:30
Toby Zerner
2dbcfe02d8 Consolidate avatar uploading, allow avatarUrl to be used when updating user 2017-10-07 17:39:27 +10:30
Daniel Klabbers
a7f3ca4b22 added new methods etc 2017-10-05 16:25:01 +02:00
Daniel Klabbers
3f9dc81874 satisfying styleci, undo mysql in travis 2017-10-05 14:02:54 +02:00
Daniel Klabbers
1c01145a14 fixed those exception handling tests 2017-10-05 13:57:31 +02:00
Daniel Klabbers
2037371886 lists > pluck 2017-10-05 13:39:41 +02:00
Toby Zerner
87bf84ef6e Allow configuring cookie attributes
I decided to put this in config.php because if cookie settings were to
be stored in the database and configured via admin UI, entering
incorrect settings could cause the admin session to be destroyed,
requiring manual database intervention to fix. But it's a good prompt
for discussion as to which kind of settings belong in config.php vs the
database. Thoughts?
2017-10-05 13:00:15 +10:30
Toby Zerner
096e552c74 Add the ApiKey model as a request attribute 2017-10-05 12:26:05 +10:30
Toby Zerner
8ccfb1aac6 Use a constant instead of a property 2017-10-05 12:25:30 +10:30
Tobias Weichart
02377663ce minor change for getting the path
* should be used via x_path() methods + parameter
2017-10-04 08:38:36 +02:00
Franz Liedke
4f688fc9a2
Change order of service provider registration
Here, the order is relevant, because at this
point, the application has already been booted.
Hence, all boot() methods are called immediately,
which might depend on other service providers'
register() methods having run.

In this case, the DiscussionServiceProvider
depends on the Gate class being registered in the
container by the UserServiceProvider.
2017-10-03 18:54:07 +02:00
Franz Liedke
fddd134fa0
Inject settings repository in event listener
`$this->app` was not defined here anyway.

Refs #1032.
2017-10-03 18:54:07 +02:00
Franz Liedke
1215a1ef9b
Use ::class constant instead of hardcoded strings 2017-10-03 18:54:07 +02:00
Franz Liedke
4aad7c1040
Cleanup code, typehints and class references 2017-10-03 18:54:07 +02:00
Franz Liedke
e46b3d54d1
Extract Flarum\Foundation\Site class
This class holds all information relevant to a local Flarum site,
such as paths and local configuration. From this information, it
is able to instantiate a Flarum\Foundation\Application instance,
which represents a Flarum installation's runtime.

This will also be useful for setting up e.g. multi-tenant
environments.
2017-10-03 18:54:07 +02:00
Franz Liedke
051bb5acb8
Fix code style 2017-10-03 18:54:07 +02:00
Franz Liedke
69b517ea79
Get rid of Server classes for Admin, API and Forum
The various middleware can be registered in the service provider,
and the rest of the logic can all go through one single front
controller (index.php in flarum/flarum, and Flarum\Http\Server in
flarum/core).

This will also simplify the necessary server setup, as only one
rewrite rule remains.
2017-10-03 18:54:07 +02:00
Franz Liedke
b4c7f8ca89
Move event to Flarum\User namespace 2017-10-03 18:54:07 +02:00
Franz Liedke
3ece3ca976
Move events to Flarum\Api namespace 2017-10-03 18:54:07 +02:00
Franz Liedke
9c77475985
Fix order of namespace imports 2017-10-03 18:54:06 +02:00
Franz Liedke
b72407440d
Combine URL generator classes into one 2017-10-03 18:54:06 +02:00
Franz Liedke
f824dcfb53
Move more event classes to appropriate namespaces 2017-10-03 18:54:06 +02:00
Franz Liedke
78f3681fc1
Fix namespace orderings
(Thanks, StyleCI!)
2017-10-03 18:54:06 +02:00
Franz Liedke
5b0d0d9f0f
Move command classes to domain namespaces
They will probably be refactored away at a later stage (when we get
rid of the command bus). Until then, this lets us remove the
Flarum\Core namespace and actually feels quite clean.
2017-10-03 18:52:50 +02:00
Franz Liedke
95dc7e71f4
Fix namespaces 2017-10-03 18:52:50 +02:00
Franz Liedke
a39ed6edec
Rename listener class to DiscussionRenamedLogger 2017-10-03 18:52:50 +02:00
Franz Liedke
66f35d2530
Split up old CoreServiceProvider 2017-10-03 18:52:50 +02:00
Franz Liedke
e6e4531771
Fix class names in strings 2017-10-03 18:49:53 +02:00
Franz Liedke
e71deed8d5
Move ExtensionValidator class to Flarum\Extension namespace 2017-10-03 18:49:53 +02:00
Franz Liedke
8a16c1ecc8
Move UserState class to Flarum\Discussion namespace 2017-10-03 18:49:53 +02:00
Franz Liedke
b38ade986d
Extract Flarum\Notification namespace 2017-10-03 18:49:53 +02:00
Franz Liedke
4a13cd8088
Move another trait out of obsolete Flarum\Core namespace 2017-10-03 18:49:53 +02:00
Franz Liedke
920a4071b6
Fix some incorrect automated refactorings 2017-10-03 18:49:53 +02:00
Franz Liedke
c22219ec20
Extract Flarum\Group namespace 2017-10-03 18:49:53 +02:00
Franz Liedke
11bf3e34b7
Extract Flarum\Search namespace 2017-10-03 18:49:53 +02:00
Franz Liedke
4fb38d6458
Extract new Flarum\Discussion namespace 2017-10-03 18:49:52 +02:00
Franz Liedke
66abd7ecfd
Extract new Flarum\Post namespace 2017-10-03 18:47:23 +02:00
Franz Liedke
3481798875
Fix trait imports 2017-10-03 18:47:23 +02:00
Franz Liedke
9abc63aaac
Move events to Flarum\Extension\Event namespace 2017-10-03 18:47:23 +02:00
Franz Liedke
6cd6a7d260
Move events to Flarum\Formatter\Event namespace 2017-10-03 18:47:23 +02:00
Franz Liedke
6c9ff72efb
Finalize Flarum\Foundation namespace 2017-10-03 18:47:23 +02:00
Franz Liedke
33e3d757c3
Flatten Flarum\Http namespace 2017-10-03 18:47:23 +02:00
Franz Liedke
551e76f296
Move events to Flarum\Settings\Event namespace 2017-10-03 18:47:23 +02:00
Franz Liedke
564ea8ff73
Extract new Flarum\User namespace 2017-10-03 18:47:23 +02:00
Franz Liedke
fda8c597f4
Flarum\Frontend: Rename ConfigureWebApp event to Rendering 2017-10-03 18:45:41 +02:00
Franz Liedke
5d1564e0fc
Flarum\Frontend: Fix view paths after renaming namespace 2017-10-03 18:45:41 +02:00
Franz Liedke
1f1b63363e
Rename controller file 2017-10-03 18:45:41 +02:00
Franz Liedke
bdf455c0c6
Move ScopeVisibilityTrait to Database namespace 2017-10-03 18:45:41 +02:00
Franz Liedke
927e4ca3ed
Restructure Flarum\Forum namespace 2017-10-03 18:45:40 +02:00
Franz Liedke
0be13d50bd
Create new Flarum\Frontend namespace
It replaces the old Http\WebApp namespace and swallows other namespaces
and files, such as Flarum\Asset.
2017-10-03 18:45:40 +02:00
Franz Liedke
6268c3010f
Fix serializer class names 2017-10-03 18:45:40 +02:00
Franz Liedke
acf43606a8
Register new MigrationServiceProvider 2017-10-03 18:45:40 +02:00
Franz Liedke
5ae2e9d232
Get rid of Flarum\Debug namespace 2017-10-03 18:45:40 +02:00
Franz Liedke
d897839097
Restructure Flarum\Database namespace 2017-10-03 18:45:40 +02:00
Franz Liedke
c6985ae31c
Restructure Flarum\Console namespace 2017-10-03 18:45:40 +02:00
Franz Liedke
9b24fbd5e5
Restructure Flarum\Api namespace 2017-10-03 18:45:40 +02:00
Franz Liedke
5127514d35
Restructure Flarum\Admin namespace 2017-10-03 18:45:38 +02:00
Toby Zerner
eb72307a54 User display names (#1246)
* Introduce user display names

It is not uncommon for forums to be intergrated with sites where users
don't have a unique "handle" - they might just have their first name,
or a full name, which is not guaranteed to be unique.

This commit introduces the concept of "display names" for users. By
default display names are the same as usernames, but extensions may
override this and set them to something different. The important thing
is that all code should use `display_name` whenever intending to output
a human-readable name - `username` is reserved for cases where you want
to output a unique identifier (which may or may not be human-friendly).

The new "GetDisplayName" API is probably sub-optimal, but I didn't worry
too much because we can come up with something better in `next-back`.

ref #557

* Apply fixes from StyleCI

[ci skip] [skip ci]
2017-09-20 16:42:18 +09:30
Toby Zerner
f917d1438c Use ::class 2017-09-19 19:45:31 +09:30
Toby Zerner
ef89b1f6b1 Remove unnecessary else statement 2017-09-19 19:44:43 +09:30
Toby Zerner
377d439c47 😅 2017-09-19 19:13:02 +09:30
Toby Zerner
37cf95f94d Don't include post content in the "basic" serializer
Currently all of a post's replies are loaded in full whenever the post
is loaded, which is kind of overkill - we really just need to know that
they exist (and who posted them) in order to render the "X replied to
this" line.
2017-09-19 19:10:07 +09:30
Toby Zerner
c31c1ea062 Allow full URLs to be used as the avatar path
This is useful for forums integrating with an external website (eg. a
WordPress site), so they can reference existing avatars directly.

For alternative storage locations (eg. S3) the best practice will still
be to store a relative path and then configure an external base "assets
URL" (this is not currently possible - TODO).

Given this change, I think it would probably make sense to rename the
column to `avatar_url` in the upcoming batch of database naming changes
- then it can contain either a relative or an absolute URL -
@franzliedke do you agree?
2017-09-19 19:03:12 +09:30
Toby Zerner
084f74946d Allow setting the raw content of a CommentPost 2017-09-19 12:13:24 +09:30
epoxa
cbe4464178 Fix oauth controller wrong session method call (#1226) 2017-08-19 14:43:21 +09:30
Toby Zerner
ce8a5b3e0f v0.1.0-beta.7 2017-07-22 12:48:58 +09:30
Toby Zerner
4f3e67714e Fix incorrect migration notes for extensions without any migrations
When running migrations for an extension without any migrations (eg.
BBCode), the migration notes for the previous extension were being
displayed, because the Migrator never had a chance to clear them.
2017-07-22 11:43:50 +09:30
Toby Zerner
54be3ad3c8 Define the default moderator group ID
This allows extensions to add default permissions for moderators,
without having to hardcode in the default moderator group ID.
2017-07-22 11:41:20 +09:30
Toby Zerner
0b00d56416 Add a new migration helper for adding default permissions 2017-07-22 11:40:06 +09:30
Toby Zerner
89d4a1e849 Remove MySQL port field from visual installer
Port can still be specified by suffixing the host with a :

closes #825
2017-07-22 11:32:07 +09:30
Daniël Klabbers
43ee7b59a4 Update Client.php (#1198)
* Update Client.php

Now forwarding exceptions from client to page in case debug mode is on. Fixes #1120.

* Update Client.php

Satisfying .. the unsatisfiable.

* Update Client.php

Satisfying again.
2017-07-19 22:14:00 +02:00
Toby Zerner
4b47adabcf Oops, that should be in seconds not minutes 2017-07-08 22:35:11 +09:30
Toby Zerner
93140b8fa4 Remember users forever (5 years) rather than 2 weeks 2017-07-08 22:29:26 +09:30
Franz Liedke
8ea13dc826
Flatten implementation of SelfDemotionGuard listener
Refs #736 and #1195.
2017-07-06 21:57:47 +02:00
David Sevilla Martín
99d42372c3 Prevent yourself from locking yourself out of admin group (#1195) 2017-07-06 21:43:01 +02:00
Franz Liedke
01b56eecdb Merge pull request #1201 from Luceos/patch-3
Update AbstractSerializer.php
2017-06-23 00:02:16 +02:00
Daniël Klabbers
d6c99eccdb Update WebAppView.php
Added argument type hinting where absent.
2017-06-22 16:27:10 +02:00
Daniël Klabbers
01cb8ab79d Update AbstractSerializer.php
Fixes missing argument in method. Verified it has to be a string.
2017-06-22 14:28:51 +02:00
Daniël Klabbers
57570d960e Update StartSession.php
Fixed CookieFactory typo in phpdoc.
2017-06-19 16:47:20 +02:00
Daniël Klabbers
04c4806f6f making posts and discussions private (#1153)
* flagrow/byobu#11 making posts and discussions private

* tested migrations and tested setting is_private on discussion and post manually

* added phpdoc for Post and Discussion and added the casting for these attributes

* satisfying styleci

* fixes for review

* added new private discussion event and included it in the access policy

* added new private post event and included it in the access policy
2017-05-27 14:19:15 +09:30
Davis
4c0339c30e Allow JSON to be used for Install Command (#1193)
* Allow JSON to be used for Install Command

* Return configuration as array instead of object.

* Update InstallCommand.php
2017-05-27 14:18:09 +09:30
David Sevilla Martín
e64dc4ea45 Add viewUserList permission (#1190) 2017-05-24 22:06:56 +09:30
David Sevilla Martín
23b423c6ce #1184 Fix /api/posts returning 500 (#1188)
* Fix ListPostsController::applyFilters not receiving array if argument not present

* Whoops! Use `[]` instead of `array()`

* Update AbstractSerializeController.php

* Update ListPostsController.php
2017-05-18 22:04:00 +02:00
Zeokat
7837fff107 Support PNG avatars with transparent backgrounds and fix EXIF rotation (#1168)
As `orientate` requires the EXIF extension, we can only call it if the extension is installed.

Fixes #1161 and #1163.
2017-05-10 21:23:08 +02:00
Daniël Klabbers
9836ff6c54 Update HandleErrors.php
@franzliedke forgot to make variables available to the method, just triggered this but got a warning that all three variables are undefined.
2017-05-08 16:45:58 +02:00
Franz Liedke
bf20fe595a
Fix incorrect sort field name
Closes #1175.
2017-05-04 21:37:03 +02:00
Franz Liedke
2f714a01ed
Cookies: Set expires flag for remember cookies
Without this, session remembering would not work in Internet
Explorer (and Edge?).

Fixes #1127.
2017-03-14 22:25:20 +01:00
Franz Liedke
231d018de5
Add link() and setCanonicalUrl() methods to the WebAppView
These make it easier for controllers to define relationships from
the current to other pages, which is important for SEO mostly.
2017-03-13 18:08:32 +01:00
Franz Liedke
5d62231004
Fix comment typo 2017-03-13 12:52:25 +01:00
David Sevilla Martín
60d3d6ef99 Add option to hide the language selector (#1106)
* Added option to hide the language selector in the header
* Added `hide_language_selector` Switch to BasicsPage
* Added `hideLanguageSelector` property to ForumSerializer
* Apparently fixed the "Add Extension" button locale.... someone must not have compiled their changes :P

* Changed hideLanguageSelector (and such) to showLanguageSelector

* Change `core.admin.basics.show_language_selector_heading` to be `_label`

* Change showLanguageSelector in ForumSerializer to be boolean, default: true

* Ooops! Remove console.log 🤦‍♂️
2017-03-07 10:04:44 +10:30
Sajjad Hashemian
92b555a246 prevent unsafe redirect via logout controller 2017-03-04 14:51:21 +03:30
Clark Winkelmann
bb1e3278de Fix asset path when unpublishing 2017-02-16 01:51:33 +01:00
Franz Liedke
bbcc33b5b5
Turn a few setters/getters into public attributes
There were no type hints etc. going on, and we would have needed
the getters anyway.

See https://github.com/flarum/core/pull/1105#issuecomment-279310998.
2017-02-14 22:56:17 +01:00
Daniël Klabbers
cd70819fd5
fixed issues with $extension visibility and typehinting 2017-02-11 21:14:44 +01:00
Franz Liedke
20b4619e75
Fix Stratigility deprecation, for real this time 2017-02-07 20:52:06 +01:00
Franz Liedke
d7e4ae09b3 Merge pull request #1113 from oanhnn/patch-1
Correct image orientation according to Exif data
2017-02-03 23:50:04 +01:00
David Sevilla Martín
fcfc1b2a37 Add more attributes in app.blade.php and add a setDescription method. (#1105)
* Added `language` and `direction` properties to WebAppView

* Use properties `language` and `direction` in app.blade.php

* Added WebAppView::setDescription to set the meta description

* Whoops! Changed "ltr" to \'ltr\'. Thanks StyleCI :)

* Removed unnecessary `= null` for

* Changed `.. ? .. : ..` to `.. ?: ..`. Useful thing right there ;)
2017-02-03 23:09:22 +01:00
Franz Liedke
01eba18164 Merge pull request #1100 from flarum/stratigility-update
Update to Zend Stratigility 1.3
2017-02-03 22:03:55 +01:00
Franz Liedke
b7d6ba4893
Trim lines 2017-02-03 20:28:04 +01:00
Franz Liedke
d3753d94ae
Throw HTTP 403 on extension validation error
The way I read it, HTTP 405 is a generic statement about the
resource. Once a language pack is not the default, this is not
true anymore, so I figured 403 is more correct.
2017-02-03 20:25:21 +01:00
Franz Liedke
9349ed13fc
Make event attributes public
Without this, reading the extension information would not be
possible for the validator.
2017-02-03 20:23:24 +01:00
Franz Liedke
91ace15f6d Merge pull request #1032 from dav-is/patch-1
Prevent deletion of default/all locale(s)
2017-02-03 20:21:19 +01:00