Simple forum software for building great communities.

Last update: Jun 27, 2022

PHP Tests Total Downloads Latest Version License StyleCI

About Flarum

Flarum is a delightfully simple discussion platform for your website. It's fast and easy to use, with all the features you need to run a successful community. It is designed to be:

  • Fast and simple. No clutter, no bloat, no complex dependencies. Flarum is built with PHP so it’s quick and easy to deploy. The interface is powered by Mithril, a performant JavaScript framework with a tiny footprint.

  • Beautiful and responsive. This is forum software for humans. Flarum is carefully designed to be consistent and intuitive across platforms, out-of-the-box.

  • Powerful and extensible. Customize, extend, and integrate Flarum to suit your community. Flarum’s architecture is amazingly flexible, with a powerful Extension API.

Installation

This repository contains Flarum's core code. If you want to set up a forum, visit the Flarum skeleton repository.

Contributing

Thank you for considering contributing to Flarum! Please read the Contributing guide to learn how you can help.

Security Vulnerabilities

If you discover a security vulnerability within Flarum, please send an e-mail to [email protected]. All security vulnerabilities will be promptly addressed. More details can be found in our security policy.

License

Flarum is open-source software licensed under the MIT License.

GitHub

https://github.com/flarum/core
Comments
  • 1. New PHP Extension API

    In every extension, we have an AddClientAssets listener which is basically the same:

    class AddClientAssets
    {
        public function subscribe(Dispatcher $events)
        {
            $events->listen(ConfigureClientView::class, [$this, 'addAssets']);
        }
    
        public function addAssets(ConfigureClientView $event)
        {
            if ($event->isForum()) {
                $event->addAssets([
                    __DIR__.'/../../js/forum/dist/extension.js',
                    __DIR__.'/../../less/forum/extension.less'
                ]);
                $event->addBootstrapper('flarum/auth/facebook/main');
            }
    
            if ($event->isAdmin()) {
                $event->addAssets([
                    __DIR__.'/../../js/admin/dist/extension.js',
                    __DIR__.'/../../less/forum/extension.less'
                ]);
                $event->addBootstrapper('flarum/auth/facebook/main');
            }
        }
    }
    

    Given that this asset file-structure is a best practice, we could reduce this duplication by providing an instantiable AddDefaultClientAssets listener. In bootstrap.php, instead of:

    return function (Dispatcher $events) {
        $events->subscribe(Listener\AddClientAssets::class);
    };
    

    you would use:

    return function (Dispatcher $events, Extension $extension) {
        $events->subscribe(new AddDefaultClientAssets($extension));
    };
    

    This would add the default asset file paths if they exist, along with JS bootstrappers using the Extension's ID as a prefix.

    We could also extend this idea of shortcut listeners to other things, e.g.:

    return function (Dispatcher $events) {
        $events->subscribe(new AddForumRoute($extension, 'get', '/auth/facebook', 'auth', FacebookAuthController::class));
    
        $events->subscribe(new AddPostType(DiscussionStickiedPost::class));
    };
    

    This needs discussion because to me it's a little unclear how far we would want to go with providing these helpers. Where do we draw the line?

    Reviewed by tobyzerner at 2016-03-07 01:27
  • 2. MariaDB 10.2.7+ nullable date/time (Invalid default value for 'notifications_read_time')

    Bug report

    • Version of Flarum: 0.1.0-beta.7
    • The webserver you are running: apache + nginx
    • PHP version: 7.1.7
    • MySQL version: MariaDB 10.2.7

    Getting this error when trying to install:

    Something went wrong: SQLSTATE[42000]: Syntax error or access violation: 1067 Invalid default value for 'notifications_read_time' (SQL: ALTER TABLE main_users CHANGE notification_read_time notifications_read_time DATETIME DEFAULT 'NULL')
    

    error

    UPDATE: Adding composer show

    components/font-awesome         4.7.0         The iconic font designed for use with Twitter Bootstrap.
    danielstjules/stringy           1.10.0        A string manipulation library with multibyte support
    dflydev/fig-cookies             v1.0.2        Cookies for PSR-7 HTTP Message Interface.
    doctrine/annotations            v1.5.0        Docblock Annotations Parser
    doctrine/cache                  v1.7.0        Caching library offering an object-oriented API for many cache backends
    doctrine/collections            v1.5.0        Collections Abstraction library
    doctrine/common                 v2.8.0        Common Library for Doctrine projects
    doctrine/dbal                   v2.6.0        Database Abstraction Layer
    doctrine/inflector              v1.2.0        Common String Manipulations with regard to casing and singular/plural rules.
    doctrine/lexer                  v1.0.1        Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.
    filp/whoops                     2.1.9         php error handling for cool kids
    flarum/core                     v0.1.0-beta.7 Delightfully simple forum software.
    flarum/flarum-ext-akismet       v0.1.0-beta.6 Stop spam using the Akismet anti-spam service.
    flarum/flarum-ext-approval      v0.1.0-beta.7 Make discussions and posts require moderator approval.
    flarum/flarum-ext-auth-facebook v0.1.0-beta.6 Allow users to log in with Facebook.
    flarum/flarum-ext-auth-github   v0.1.0-beta.6 Allow users to log in with GitHub.
    flarum/flarum-ext-auth-twitter  v0.1.0-beta.6 Allow users to log in with Twitter.
    flarum/flarum-ext-bbcode        v0.1.0-beta.5 Allow posts to be formatted with BBCode.
    flarum/flarum-ext-emoji         v0.1.0-beta.6 Convert text and unicode emoji into Twemoji.
    flarum/flarum-ext-english       v0.1.0-beta.7 English language pack.
    flarum/flarum-ext-flags         v0.1.0-beta.7 Allow users to flag posts for moderator review.
    flarum/flarum-ext-likes         v0.1.0-beta.6 Allow users to like posts.
    flarum/flarum-ext-lock          v0.1.0-beta.7 End a discussion and don't let anyone add further replies.
    flarum/flarum-ext-markdown      v0.1.0-beta.5 Allow posts to be formatted with Markdown.
    flarum/flarum-ext-mentions      v0.1.0-beta.7 Mention and reply to specific posts and users.
    flarum/flarum-ext-pusher        v0.1.0-beta.6 See new discussions and posts in real-time using Pusher.
    flarum/flarum-ext-sticky        v0.1.0-beta.7 Pin discussions to the top of the list.
    flarum/flarum-ext-subscriptions v0.1.0-beta.6 Allow users to follow discussions and receive notifications for new posts.
    flarum/flarum-ext-suspend       v0.1.0-beta.7 Suspend users so they can't post.
    flarum/flarum-ext-tags          v0.1.0-beta.8 Organize discussions into a hierarchy of tags and categories.
    franzl/studio                   0.11.2        Develop your Composer libraries with style
    franzl/whoops-middleware        0.4.1        
    guzzlehttp/guzzle               6.3.0         Guzzle is a PHP HTTP client library
    guzzlehttp/promises             v1.3.1        Guzzle promises library
    guzzlehttp/psr7                 1.4.2         PSR-7 message implementation that also provides common utility methods
    http-interop/http-middleware    0.2.0         Common interface for HTTP middleware
    illuminate/bus                  v5.1.41       The Illuminate Bus package.
    illuminate/cache                v5.1.41       The Illuminate Cache package.
    illuminate/config               v5.1.41       The Illuminate Config package.
    illuminate/container            v5.1.41       The Illuminate Container package.
    illuminate/contracts            v5.1.41       The Illuminate Contracts package.
    illuminate/database             v5.1.41       The Illuminate Database package.
    illuminate/events               v5.1.41       The Illuminate Events package.
    illuminate/filesystem           v5.1.41       The Illuminate Filesystem package.
    illuminate/hashing              v5.1.41       The Illuminate Hashing package.
    illuminate/mail                 v5.1.41       The Illuminate Mail package.
    illuminate/pipeline             v5.1.41       The Illuminate Pipeline package.
    illuminate/support              v5.1.41       The Illuminate Support package.
    illuminate/validation           v5.1.41       The Illuminate Validation package.
    illuminate/view                 v5.1.41       The Illuminate View package.
    intervention/image              2.4.0         Image handling and manipulation library with support for Laravel integration
    ircmaxell/random-lib            v1.2.0        A Library For Generating Secure Random Numbers
    ircmaxell/security-lib          v1.1.0        A Base Security Library
    league/flysystem                1.0.40        Filesystem abstraction: Many filesystems, one API.
    league/oauth1-client            1.7.0         OAuth 1.0 Client Library
    league/oauth2-client            1.4.2         OAuth 2.0 Client Library
    league/oauth2-facebook          1.4.5         Facebook OAuth 2.0 Client Provider for The PHP League OAuth2-Client
    league/oauth2-github            0.2.2         Github OAuth 2.0 Client Provider for The PHP League OAuth2-Client
    matthiasmullie/minify           1.3.46        CSS & JS minifier
    matthiasmullie/path-converter   1.1.0         Relative path converter
    monolog/monolog                 1.23.0        Sends your logs to files, sockets, inboxes, databases and various web services
    nesbot/carbon                   1.22.1        A simple API extension for DateTime.
    nikic/fast-route                v0.6.0        Fast request router for PHP
    oyejorge/less.php               v1.7.0.14     PHP port of the Javascript version of LESS http://lesscss.org (Originally maintained by Josh Schmidt)
    paragonie/random_compat         v1.4.2        PHP 5.x polyfill for random_bytes() and random_int() from PHP 7
    psr/http-message                1.0.1         Common interface for HTTP messages
    psr/log                         1.0.2         Common interface for logging libraries
    pusher/pusher-php-server        2.6.4         Library for interacting with the Pusher REST API
    s9e/text-formatter              0.8.5         Multi-purpose text formatting and markup library. Plugins offer support for BBCodes, Markdown, emoticons, HTML, embedding media (YouTube, e...
    swiftmailer/swiftmailer         v5.4.8        Swiftmailer, free feature-rich PHP mailer
    symfony/console                 v2.8.25       Symfony Console Component
    symfony/debug                   v2.7.32       Symfony Debug Component
    symfony/filesystem              v3.3.5        Symfony Filesystem Component
    symfony/finder                  v2.7.32       Symfony Finder Component
    symfony/http-foundation         v2.7.32       Symfony HttpFoundation Component
    symfony/polyfill-mbstring       v1.4.0        Symfony polyfill for the Mbstring extension
    symfony/process                 v3.3.5        Symfony Process Component
    symfony/translation             v2.7.32       Symfony Translation Component
    symfony/yaml                    v2.8.25       Symfony Yaml Component
    tijsverkoyen/akismet            1.1.1         Akismet is a wrapper-class to communicate with the Akismet API.
    tobscure/json-api               v0.3.0        JSON-API responses in PHP
    zendframework/zend-diactoros    1.4.0         PSR HTTP Message implementations
    zendframework/zend-escaper      2.5.2        
    zendframework/zend-stratigility 1.3.3         Middleware for PHP
    
    Reviewed by KitsuneSolar at 2017-07-25 21:38
  • 3. #258 SMTP UI Settings & Advanced Page

    This (i think) fixes #258. Please give me feedback to make anything better :wink:

    The only thing missing is the locale in flarum/flarum-ext-english I've tested it, and it works fine; aka it puts the data in the database correctly. Here is a screenshot:

    Flarum Admin: Advanced Page w/ SMPT Settings

    Reviewed by datitisev at 2016-04-16 16:47
  • 4. Convention for permissions

    Before stable we need to:

    • decide on a permission convention
    • decide whether we want to enact this convention
    • if so, apply the changes to core and bundled extensions.

    Some options in the conventions:

    • using dot namespaced permission, eg user.edit
    • using camelcase userEdit

    What we have to consider is that permissions are usually made an attribute on a model. So it's pretty confusing if different conventions are used for model attributes, permissions and permission grid keys, for instance:

    camelCase used in core for viewDiscussions: https://github.com/flarum/core/blob/88366fe8af3baa566ad625743016acb85a0cf345/js/src/admin/components/PermissionGrid.js#L104-L113

    camelCase and dot mixed viewLastSeenAt and user.viewLastSeenAt: https://github.com/flarum/core/blob/88366fe8af3baa566ad625743016acb85a0cf345/js/src/admin/components/PermissionGrid.js#L153-L157

    Reviewed by luceos at 2020-06-19 20:41
  • 5. Rewrite JavaScript component layer for Mithril 1.0

    Part of #262.

    The base Component class is an abstraction layer on top of Mithril's raw components which makes components a bit easier to work with, a bit more React-like, and is better for extensibility.

    It's very generic, with no specific ties to Flarum, so it should be extracted into its own external package so it can be used in other projects and developed independently of Flarum.

    Unfortunately, its API is also very unfamiliar. It's really an odd mix of Mithril and React. We have the view method from Mithril, config as a method instead of a vdom attribute, onunload from Mithril, this.props from React, this.$() from Ember, and some of our own inventions like init and initProps. This mixture is bad for onboarding new core/extension developers, because they'll have to learn something new/different even if they're already familiar with Mithril/React.

    I propose that when we extract this package, we change the API so that it reflects React as closely as possible. (The React API is more flexible and better for extensibility than the Mithril API.) The package can be called tobscure/mithreact – a React-like API for Mithril components.

    Here is an example of a simple component – first with the current API, and then the equivalent with my proposed Mithreact API:

    Current

    class MyComponent extends Component {
      // 1. Initialize props as they come in
      static initProps(props) {
        props.icon = props.icon || 'mail';
        props.className += ' bar';
      }
    
      init() {
        super.init();
    
        // 2. Set initial state
        this.email = m.prop('[email protected]');
    
        // 3. Determine whether the component should redraw by dirty-checking a value
        this.subtree = new SubtreeRetainer(this.email);
      }
    
      view() {
        // 3. Determine whether the component should redraw by dirty-checking a value
        return this.subtree.retain() || () =>
          <div className={this.props.className}>
            <i className={'fa fa-'+this.props.icon}/>
            // 4. Get and set component state
            <input type="text" value={this.email()} onchange={m.withAttr('value', this.email)}/>
          </div>;
      }
    
      config(isInitialized) {
        if (!isInitialized) {
          // 5. Initialize the DOM
          this.$('input').css('border-color', 'red');
        } else {
          // 6. Update the DOM
          this.$('input').css('border-color', 'blue');
        }
      }
    
      onunload(e) {
        // 7. Hook onto component dismount, and potentially prevent it
        if (this.email() !== '[email protected]') {
          e.preventDefault();
        }
      }
    }
    

    Mithreact

    class Dropdown extends Component {
      // 1. Initialize props as they come in
      getDefaultProps() {
        return {icon: 'mail'};
      }
    
      componentWillReceiveProps(nextProps) {
        nextProps.className += ' bar';
      }
    
      // 2. Set initial state
      getInitialState() {
        return {email: '[email protected]'};
      }
    
      render() {
        return (
          <div className={this.props.className}>
            <i className={'fa fa-'+this.props.icon}/>
            // 4. Get and set component state
            <input type="text" value={this.state.email} onchange={this.handleEmailChange.bind(this)}/>
          </div>
        );
      }
    
      handleEmailChange(e) {
        this.setState({email: e.target.value});
      }
    
      componentDidMount() {
        // 5. Initialize the DOM
        this.$('input').css('border-color', 'red');
      }
    
      shouldComponentUpdate(nextProps, nextState) {
        // 3. Determine whether the component should redraw by dirty-checking a value
        return nextState.email !== this.state.email;
      }
    
      componentDidUpdate() {
        // 6. Update the DOM
        this.$('input').css('border-color', 'blue');
      }
    
      componentWillUnmount() {
        // 7. Hook onto component dismount, and potentially prevent it
        if (this.email() !== '[email protected]') {
          return false;
        }
      }
    }
    

    Advantages of Mithreact:

    • It's more or less the same as the React API, so people will be familiar with it
    • By dividing things up into more methods with less arguments, things are cleaner, and extensions will have an easier time monkey-patching
    • Component state is encapsulated so we can potentially get some performance gains for free

    Disadvantages:

    • Lots of refactoring to do for core + existing extensions

    Thoughts?

    Reviewed by tobyzerner at 2016-03-18 09:32
  • 6. Revamp admin interface

    _1 Upvote_ The Extensions page should be divided into categories so extensions will be easier to locate.

    Possible categories to add:

    • Authentication & Security
    • Formatting (Markdown, BBcode, etc.)
    • Language packs
    • Themes
    • Other

    The Extension page will need to use composer.json tag info to determine which category an installed extension should be displayed under.

    Reviewed by dcsjapan at 2016-01-14 06:59
  • 7. [Markdown] Toolbar causes issues in IE 11

    Bug Report

    Current Behavior In Internet Explorer Version 11 (11.407.17134.0) on Windows 10 (10.0.17134 Build 17134), I am unable to create a discussion or even reply to one when I am logged in. What makes this absolutely weird is that I'm getting no errors in the console and the only reason how I came across these bugs was that I was in the process of retesting to #1174. I can reproduce this both locally and on Flarum Discuss (despite Flarum Discuss running on dev-master). I have kept in mind that Microsoft does not support this browser anymore as of January 12, 2016, but it is still bundled with the OS and is still widely used with legacy web applications.

    Steps to Reproduce

    Part 1:

    1. Open up Internet Explorer (Version 11).
    2. Go to your locally hosted Flarum or https://discuss.flarum.org/
    3. Log in if you aren't already.
    4. Click on the "Start a Discussion button".
    5. Observe as the discussion composer does not appear.

    Part 2:

    1. Open up Internet Explorer (Version 11).
    2. Go to your locally hosted Flarum or https://discuss.flarum.org/
    3. Log in if you aren't already.
    4. Open up any discussion that is not locked.
    5. Attempt to reply to the discussion.
    6. Observe as the reply/pos composer does not appear.

    Expected Behavior In using IE11, I should be able to create a new discussion and see the discussion composer pop-up as well as being able to reply to any discussion that is not locked.

    Screenshots N/A

    Environment

    • Flarum version: v0.1.0-beta.8.1 (locally hosted) or dev-master on Flarum Discuss
    • Website URL: Localhost or https://discuss.flarum.org/
    • Webserver: Apache (locally hosted)
    • Hosting environment: Locally hosted (WAMP)
    • PHP version: 7.2.4 (locally hosted)
    • Browser: Internet Explorer Version 11 (11.407.17134.0)
    Output of "php flarum info", run this in terminal in your Flarum directory.
    
    Flarum core 0.1.0-beta.8.1
    PHP version: 7.2.4
    Loaded extensions: Core, bcmath, calendar, ctype, date, filter, hash, iconv, jso
    n, mcrypt, SPL, pcre, readline, Reflection, session, standard, mysqlnd, tokenize
    r, zip, zlib, libxml, dom, PDO, bz2, SimpleXML, xml, wddx, xmlreader, xmlwriter,
     openssl, curl, fileinfo, gd, gettext, gmp, intl, imap, ldap, mbstring, exif, my
    sqli, Phar, pdo_mysql, pdo_sqlite, soap, sockets, sqlite3, xmlrpc, xsl
    +----------------------+-----------------+--------+
    | Flarum Extensions    |                 |        |
    +----------------------+-----------------+--------+
    | ID                   | Version         | Commit |
    +----------------------+-----------------+--------+
    | flarum-approval      | v0.1.0-beta.8   |        |
    | flarum-bbcode        | v0.1.0-beta.8   |        |
    | flarum-emoji         | v0.1.0-beta.8   |        |
    | flarum-lang-english  | v0.1.0-beta.8   |        |
    | flarum-flags         | v0.1.0-beta.8.1 |        |
    | flarum-likes         | v0.1.0-beta.8.1 |        |
    | flarum-lock          | v0.1.0-beta.8   |        |
    | flarum-markdown      | v0.1.0-beta.8   |        |
    | flarum-mentions      | v0.1.0-beta.8.1 |        |
    | flarum-statistics    | v0.1.0-beta.8   |        |
    | flarum-sticky        | v0.1.0-beta.8   |        |
    | flarum-subscriptions | v0.1.0-beta.8   |        |
    | flarum-suspend       | v0.1.0-beta.8   |        |
    | flarum-tags          | v0.1.0-beta.8.2 |        |
    +----------------------+-----------------+--------+
    Base URL: http://b81.test
    Installation path: C:\wamp64\www\b81.test
    Debug mode: off
    

    Possible Solution N/A

    Additional Context N/A

    Reviewed by Ralkage at 2018-12-14 19:29
  • 8. Database changes

    Closes #1236

    Related PRs https://github.com/flarum/flarum-ext-akismet/pull/10 https://github.com/flarum/flarum-ext-approval/pull/15 https://github.com/flarum/flarum-ext-flags/pull/15 https://github.com/flarum/flarum-ext-likes/pull/16 https://github.com/flarum/flarum-ext-lock/pull/16 https://github.com/flarum/flarum-ext-mentions/pull/34 https://github.com/flarum/flarum-ext-sticky/pull/11 https://github.com/flarum/flarum-ext-subscriptions/pull/18 https://github.com/flarum/flarum-ext-suspend/pull/19 https://github.com/flarum/flarum-ext-tags/pull/53

    Reviewed by luceos at 2018-01-11 09:15
  • 9. Problems with utf-8 characters in emails

    See example below:

    Hey lcarlos!
    
    rafaelazem mentioned you in a post in Transportadora no FKcarrier - dobrando o valor do frete.
    
    http://www.modulosfk.com.br/modulosfk/flarum/d/19/6
    
    ---
    
    @lcarlos resolvido! Muito obrigado!
    
    Apenas uma &uacute;ltima d&uacute;vida, o FKcorreios G2 substitui o FKcarrier em suas funcionalidades, isto?
    
    Obrigado!
    
    Reviewed by lcarlos-fokus at 2015-09-23 10:58
  • 10. Usernames cannot be numeric

    Currently username can be any matching regex:/^[a-z0-9_-]+$/i and the other rules (eg, min: 3). A drawback of this regex is that it allows for numeric usernames. As a consequence consider:

    User

    • id: 1337 username: Toby
    • id: 1338 username: 1337

    Hitting /api/user/1337 returns user 1337 for any other user.

    What we have to do is disallow any numeric usernames, the UserValidator has to be modified. A consideration is what to do with existing users.

    Reviewed by luceos at 2018-01-31 09:00
  • 11. User list

    We want to offer an extensible user list which displays users sorted by metrics (no. of posts/discussions in core, and could be extended to show no. of likes received, etc.)

    What needs to be done:

    • Decide if this should be part of core, or should be a default extension. (i.e. should we allow it to be disabled?)
    • Design it.
    • Implementation needs to be nutted out
    Reviewed by tobyzerner at 2015-08-28 04:11
  • 12. Styling issues on Android Chrome

    Apologies if this is not the correct repo to report at. I encountered the below styling issues on the latest version of Chrome Android.

    1. Long titles don't show entirely in the notifications area.
    2. The margins of the tags don't seem to be correct.

    Attaching Screenshots. Taken at community.sheetgo.com.

    Screenshot_20220627-191835_Chrome

    Screenshot_20220627-191724_Chrome

    Reviewed by orschiro at 2022-06-27 18:04
  • 13. Allow the user to specify a unix socket to connect to a database

    GrapheneOS is currently using 'unix_socket' => '/run/mysqld/mysqld.sock' in production and it works fine, just that the config file needs to manually edited and the database wizard doesn't seem to expose this.

    Reviewed by flawedworld at 2022-06-25 11:51
  • 14. feat: add tag selector custom setting component for `buildSettingComponent`

    Changes proposed in this pull request:

    Creates a new TagSelector component, designed for use within buildSettingComponent in conjuction with core PR #3494.

    This allows extensions to more easily select tag model instances within their settings pages.

    Reviewers should focus on:

    Checks may fail until #3494 is merged.

    Screenshot

    https://user-images.githubusercontent.com/7406822/174515268-493ee6e2-19ee-4a27-a7a6-7ce54ab8b4cb.mp4

    Necessity

    • [x] Has the problem that is being solved here been clearly explained?
    • [x] If applicable, have various options for solving this problem been considered?
    • [x] For core PRs, does this need to be in core, or could it be in an extension?
    • [x] Are we willing to maintain this for years / potentially forever?

    Confirmed

    • [x] Frontend changes: tested on a local Flarum installation.
    • [x] Core developer confirmed locally this works as intended.
    • [x] Tests have been added, or are not appropriate here.

    Required changes:

    • [ ] Related core PRs: #3494
    Reviewed by davwheat at 2022-06-20 02:37
  • 15. Test with PHP 8.2

    Need to:

    • [x] move workflow definitions from .github to the monorepo (here) (https://github.com/flarum/framework/pull/3490).
    • [ ] start testing with PHP 8.2
    Reviewed by SychO9 at 2022-06-13 11:53
  • 16. Migrate update and install pages away from legacy external jQuery

    https://github.com/flarum/framework/blob/main/framework/core/views/install/update.php#L20

    https://github.com/flarum/framework/blob/main/framework/core/views/install/install.php#L69

    Reviewed by flawedworld at 2022-06-11 14:51
  • 17. Feature: Stackable modals and removed bootstrap dialogs

    Changes proposed in this pull request: In this PR I've worked on making it possible to have multiple dialogs opened at the same time and make them stackable. I have partly used code of #3246 and altered it. It also removed the bootstrap modal dependency.

    However, I did not proceed using the native HTML Dialog element for this PR due to lack of animations (for example, the backdrop is not animatable) and responsiveness with the interface.

    A third parameter has been added to the app.modal.show function which is a boolean and defaults to false. This means that all already existing modals will keep their intended behaviour.

    I also copied the new 'dismissable' options from the other PR, such as an option to hide the dialog on escape key, clicking on the backdrop or using the close button and managing them seperately per modal. This means there is a deprecation too which was mentioned in the code.

    Reviewers should focus on:

    • Current modals are opening and closing as intended
    • Stacking multiple modals works
    • Responsiveness is still good

    Necessity

    • [x] Has the problem that is being solved here been clearly explained?
    • [x] If applicable, have various options for solving this problem been considered?
    • [x] For core PRs, does this need to be in core, or could it be in an extension?
    • [x] Are we willing to maintain this for years / potentially forever?

    Confirmed

    • [ ] Frontend changes: tested on a local Flarum installation.
    • [ ] Backend changes: tests are green (run composer test).
    • [ ] Core developer confirmed locally this works as intended.
    • [ ] Tests have been added, or are not appropriate here.
    Reviewed by jaspervriends at 2022-06-10 23:23
Daux.io is an documentation generator that uses a simple folder structure and Markdown files to create custom documentation on the fly. It helps you create great looking documentation in a developer friendly way.

Daux.io Daux.io is a documentation generator that uses a simple folder structure and Markdown files to create custom documentation on the fly. It help

Jun 29, 2022
FluxBB is a fast, light, user-friendly forum application for your website.

FluxBB 1.5 Readme About FluxBB is an open source forum application released under the GNU General Public Licence. It is free to download and use and w

Jun 27, 2022
PunBB forum

PunBB PunBB is a fast and lightweight PHP-powered discussion board. It is released under the GNU General Public License. Its primary goals are to be f

May 21, 2022
Application de forum des questions IT

About Laravel Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experie

Oct 11, 2021
PHP 7.1 ready Smart and Simple Documentation for your PHP project
PHP 7.1 ready Smart and Simple Documentation for your PHP project

Smart and Readable Documentation for your PHP project ApiGen is the simplest, the easiest to use and the most modern api doc generator. It is all PHP

Jun 6, 2022
PHP 7.1 ready Smart and Simple Documentation for your PHP project
PHP 7.1 ready Smart and Simple Documentation for your PHP project

Smart and Readable Documentation for your PHP project ApiGen is the simplest, the easiest to use and the most modern api doc generator. It is all PHP

Apr 20, 2021
Simple and effective multi-format Web API Server to host your PHP API as Pragmatic REST and / or RESTful API

Luracast Restler ![Gitter](https://badges.gitter.im/Join Chat.svg) Version 3.0 Release Candidate 5 Restler is a simple and effective multi-format Web

Jun 28, 2022
Simple forum software for building great communities.
Simple forum software for building great communities.

About Flarum Flarum is a delightfully simple discussion platform for your website. It's fast and easy to use, with all the features you need to run a

Jul 3, 2022
Simple forum software for building great communities.
Simple forum software for building great communities.

About Flarum Flarum is a delightfully simple discussion platform for your website. It's fast and easy to use, with all the features you need to run a

Jun 26, 2022
Simple forum software for building great communities.
Simple forum software for building great communities.

About Flarum Flarum is a delightfully simple discussion platform for your website. It's fast and easy to use, with all the features you need to run a

Jun 26, 2022
The forum is a base for our Youtube tutorial series on "how to build a forum"

About Laravel Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experie

Jun 11, 2022
Platform for Citizen Engagement, Smart Communities, Smart Cities in the context of the Sustainable Development Goals 🏙️👩‍💻👨‍💼🙋‍♀️🙋‍♂️🦾🤖
Platform for Citizen Engagement, Smart Communities, Smart Cities in the context of the Sustainable Development Goals 🏙️👩‍💻👨‍💼🙋‍♀️🙋‍♂️🦾🤖

Civikmind Plataforma Libre y de código abierto para la Participación Ciudadana, Veeduría Ciudadana, Gestión de Comunidades Inteligentes, Ciudades Inte

Jun 11, 2022
A curated list of Awesome WordPress Theme, Plugins and Framework development Resources and WordPress Communities.

Awesome WordPress A curated list of Awesome WordPress Theme, Plugins and Framework development Resources and WordPress Communities. Inspired by bayand

Jun 24, 2022
A forum software written in vanilla PHP with a MariaDB/MySQL database.

GloomyBB GloomyBB is a simple forum software written in vanilla PHP with a MariaDB/MySQL database. It is currently still in early development but is u

Feb 6, 2022
Daux.io is an documentation generator that uses a simple folder structure and Markdown files to create custom documentation on the fly. It helps you create great looking documentation in a developer friendly way.

Daux.io - Deprecation Notice This repository is deprecated! Daux.io has been moved to an organization, to guarantee future development and support. So

Jun 22, 2022
Daux.io is an documentation generator that uses a simple folder structure and Markdown files to create custom documentation on the fly. It helps you create great looking documentation in a developer friendly way.

Daux.io Daux.io is a documentation generator that uses a simple folder structure and Markdown files to create custom documentation on the fly. It help

Jun 29, 2022
Software to automate the management and configuration of any infrastructure or application at scale. Get access to the Salt software package repository here:
Software to automate the management and configuration of any infrastructure or application at scale. Get access to the Salt software package repository here:

Latest Salt Documentation Open an issue (bug report, feature request, etc.) Salt is the world’s fastest, most intelligent and scalable automation engi

Jun 24, 2022
GLPI is a Free Asset and IT Management Software package, Data center management, ITIL Service Desk, licenses tracking and software auditing.
GLPI is a Free Asset and IT Management Software package, Data center management, ITIL Service Desk, licenses tracking and software auditing.

GLPI stands for Gestionnaire Libre de Parc Informatique is a Free Asset and IT Management Software package, that provides ITIL Service Desk features, licenses tracking and software auditing.

Jul 1, 2022
CI4-Lic is a software license manager modul for Codeigniter 4, connecting to WordPress license server based on the Software License Manager Plugin.

CI4-Lic CI4-Lic is a software license manager modul for Codeigniter 4, connecting to WordPress license server based on Software License Manager Plugin

Jan 15, 2022
A high-performance license server system service for creating and managing products, major versions, and software licenses for the purpose of selling installable software products.
A high-performance license server system service for creating and managing products, major versions, and software licenses for the purpose of selling installable software products.

A high-performance license server system service for creating and managing products, major versions, and software licenses for the purpose of selling installable software products. Comes with a SDK and command-line tool. Works anywhere that PHP runs.

Jun 14, 2022