Elgg is an open source rapid development framework for socially aware web applications.

Last update: Aug 1, 2022

Elgg

Build status Scrutinizer Quality Score Scrutinizer Code Coverage Read the docs build status

Elgg is an open source rapid development framework for socially aware web applications.

Features

  • Well-documented core API that allows developers to kick start their new project with a simple learning curve
  • Composer is the package manager of choice that greatly simplifes installation and maintenance of Elgg core and plugins
  • Flexible system of hooks and events that allows plugins to extend and modify most aspects of application's functionality and behavior
  • Extendable system of views that allows plugins to collaborate on application's presentation layer and built out complex custom themes
  • Cacheable system of static assets that allows themes and plugins to serve images, stylesheets, fonts and scripts bypassing the engine
  • User authentication is powered by pluggable auth modules, which allow applications to implement custom authentication protocols
  • Security is ensured by built-in anti CSRF validation, strict XSS filters, HMAC signatures, latest cryptographic approaches to password hashing
  • Client-side API powered by asynchronous JavaScript modules via RequireJS and a build-in Ajax service for easy communication with the server
  • Flexible entity system that allows applications to prototype new types of content and user interactions
  • Opinionated data model with a consolidated API layer that allows the developers to easily interface with the database
  • Access control system that allows applications to build granular content access policies, as well as create private networks and intranets
  • Groups - out of the box support for user groups
  • File storage powered by flexible API that allows plugins to store user-generated files and serve/stream them without booting the engine
  • Notifications service that allows applications to subscribe users to on-site and email notifications and implement integrations with other their-party services
  • RPC web services that can be used for complex integrations with external applications and mobile clients
  • Internationalization and localization of Elgg applications is simple and can be integrated with third-party services such as Transifex
  • Elgg community that can help with any arising issues and hosts a repository of 1000+ open source plugins

Under the hood:

  • Elgg is a modular OOP framework that is driven by DI services
  • NGINX or Apache compatible
  • Symfony2 HTTP Foundation handles requests and responses
  • RequireJS handles AMD
  • Laminas Mail handles outgoing email
  • htmLawed XSS filters
  • DBAL
  • Phinx database migrations
  • CSS-Crush for CSS preprocessing
  • Imagine for image manipulation
  • Persistent caching with Memcached and/or Redis
  • Error handling with Monolog

Elgg Foundation

Elgg is managed by the Elgg Foundation, a nonprofit organization that was founded to govern, protect, and promote the Elgg open source social network engine. The Foundation aims to provide a stable, commercially and individually independent organization that operates in the best interest of Elgg as an open source project.

The Elgg project was started in 2004 by

License

Copyright (c) 2008-2020, see COPYRIGHT.txt

Elgg is released under the GNU General Public License (GPL) Version 2 and the Massachusetts Institute of Technology (MIT-X11) License.

See LICENSE.txt in the root of the package you downloaded.

Installation

For installation instructions, see http://learn.elgg.org/en/stable/intro/install.html.

For upgrade instructions, see http://learn.elgg.org/en/stable/admin/upgrading.html.

Support

The project site can be found at https://elgg.org/.

Visit http://learn.elgg.org for more information about Elgg.

Contributors

For development credits, see CONTRIBUTORS.txt.

GitHub

https://github.com/elgg/elgg
Comments
  • 1. fix(comments): keep comment access_id in sync with container

    Fixes #7807, Fixes #7984

    Voting time

    Yes let's pull this in:

    • Matt
    • Evan
    • Brett
    • Juho

    Yes with more:

    • Steve (show UI message when expanding access, don't close #7984)

    No let's do something else:

    Reviewed by beck24 at 2015-03-13 08:46
  • 2. Create form view that standardizes how labels are drawn in regard to their targets (Trac #2032)

    Original ticket http://trac.elgg.org/ticket/2032 on 40247890-05-23 by trac user gordian, assigned to cash.

    Elgg version: 1.7

    Hello,

    i found that the blog plugins edit view is a little different from other edit views (for example file and bookmarks). In the blog plugin for the forms input field there is this style:

    <p>
    <label>input field title</label>
    <br> <input field />
    </p>
    

    whereas in the other views there is this style:

    <p>
    <label>input field title
    <br> <input field />
    </label>
    </p>
    

    Im writing a plugin atm and this annoys me a little, because i cannot count on a consistent dom structure.

    Regards, gordian

    Reviewed by elgg-gitbot at 2013-02-16 16:41
  • 3. Use InnoDB instead of MyIsam (Trac #4993)

    Original ticket http://trac.elgg.org/ticket/4993 on 43059497-04-27 by trac user coldtrick, assigned to trac user coldtrick.

    Elgg version: Github Master

    Elgg should use innodb instead of the myisam storage engine.

    Innodb is in MySQL (5.5) the new standard storage engine. It provides higher concurrency use, provides transactions and foreign key support.

    Currently it is not possible to migrate Elgg to innodb because Elgg uses some full text indexes (that do not exist in InnoDB). But those indexes don't work as expected (they are slower compared to normal 'LIKE' queries, therefore it is no problem to drop those indexes and move to InnoDB.

    This will require changes in:

    • Search plugin: remove use of fulltext queries
    • Core:
      • schema sql to use innodb + removal of full text indexes
      • upgrade script to upgrade database engine to innodb and drop full text indexes
    • deprecate min_search_length (config) with default to 9999? or should we drop this?
    Reviewed by elgg-gitbot at 2013-02-16 20:21
  • 4. Improve plugin management layout

    Original ticket http://trac.elgg.org/ticket/3148 on 41206627-03-21 by ewinslow, assigned to unknown.

    Elgg version: 1.7

    And perhaps we should review what the criteria actually are of putting something onto the "simple" page.

    Reviewed by elgg-gitbot at 2013-02-16 18:08
  • 5. improve character encoding handling for friendly titles (Trac #2276)

    Original ticket http://trac.elgg.org/ticket/2276 on 40445254-04-27 by trac user belhkaci, assigned to trac user mrclay.

    Elgg version: 1.7

    I can not see the page content rss blogs when there is a blog that has a title that contains accented characters such as "é"

    Reviewed by elgg-gitbot at 2013-02-16 17:01
  • 6. Support composer for core and plugins as install method

    This ticket is not about dropping/changing manifest.xml, but rather:

    • adding composer.json to elgg core and integrating with packagist.org
    • creating elgg plugin installer and merge it with composer/installers. Have Elgg installer written and tested here: https://github.com/Srokap/installers/, just need to send them PR
    • encouraging plugin devs to integrate with composer and packagist as well

    Why bother?:

    • nicer environment for devs to use Elgg as framework and integrate it with other libraries
    • other frameworks do that
    • nice option to define and hold plugins list for a project (compare it with updating community.elgg.org)

    See other discussion:

    • https://groups.google.com/d/msg/elgg-development/z9J2Rq9EV5Q/OPbJTQAB3VYJ (just noticed @ewinslow comment on composer/installers)
    • https://github.com/Elgg/Elgg/issues/5895

    IMHO there's no downside of it at current point. We don't loose BC and if devs don't want to use composer, they can work in old way. I think package managers are great and having such for elgg would help a lot with the deployments and exchanging plugins lists.

    What do you think? Do we want it?

    /cc @brettp @ewinslow @beck24 @mrclay @juho-jaakkola @cash

    Reviewed by Srokap at 2013-12-23 23:20
  • 7. ElggEntity->getIconURL() is session bound, why?

    What was the reasoning behind making all the entity icon urls session bound?

    This means that every icon url is unique per user/session, so caching servers have no useful way of caching the entity icons. This increases the load on the webserver.

    Yes the serve-file doesn't boot core and is fast, but caching servers are faster ;)

    @Elgg/core feedback please

    Reviewed by jeabakker at 2016-10-13 09:12
  • 8. Elgg 2.3.0: CKeditor broken (either issue in AMD module of CKeditor or Elgg core caching issue)

    After denying in https://elgg.org/discussion/view/2594751/ckeditor-issue that CKeditor is broken I now also have a broken CKeditor on any browser with Elgg 2.3.0 and caching enabled.

    Browser console gives me

    Failed to load resource: http://site.url/cache/1485283855/default/elgg/ckeditor/config.js the server responded with a status of 404 (Not Found)

    and

    require.js:17 Uncaught Error: Script error for "elgg/ckeditor/config", needed by: elgg/ckeditor http://requirejs.org/docs/errors.html#scripterror at makeError (require.js:17) at HTMLScriptElement.onScriptError (require.js:117)

    CKeditor instance loads fine with caching disabled or with at least no "cache" link in the root directory.

    So, it might not be an issue of CKeditor but rather a bug with caching / cache rebuilding (maybe a problem connected or in addition of https://github.com/Elgg/Elgg/issues/10706)

    Reviewed by iionly at 2017-01-24 19:00
  • 9. Elgg should come with a default lightbox plugin (Trac #2882)

    Original ticket http://trac.elgg.org/ticket/2882 on 41110698-07-13 by trac user coldtrick, assigned to unknown.

    Elgg version: 1.7

    Much developers use a lightbox in their application.

    Currently the only elgg core plugin which provides such functionality is the embed plugin, but you not always need the features of the embed plugin.

    I suggest a plugin that does nothing more than to provide a few js files to create a lightbox.

    Why?

    • Now all my custom plugins must include this lightbox js!
    • More developers will use the same lightbox (version and type) if it is default provided with Elgg (consistent UX and less custom CSS work)

    The lightbox code provided in the embed plugin is not sufficient to me. I suggest the following lightbox tool to become the default Elgg lightbox:

    Fancybox: http://fancybox.net/

    Why fancybox? Because of its features! As a developer i never ran into a situation where fancybox could not deliver.

    Reviewed by elgg-gitbot at 2013-02-16 17:48
  • 10. Review and correct z-index issues in default theme (Trac #3617)

    Original ticket http://trac.elgg.org/ticket/3617 on 41487919-07-02 by cash, assigned to unknown.

    Elgg version: Github Master

    I noticed some issues when working with the lightbox. For example, the site menu was actually above the lightbox background (of 1000).

    Add todo's here:

    • [ ] We need to increase z-index of .ui-datepicker to over 1100 for it work in a colorbox. #9861
    Reviewed by elgg-gitbot at 2013-02-16 18:46
  • 11. Proposal for entity list system (Trac #2567)

    Original ticket http://trac.elgg.org/ticket/2567 on 40796290-01-22 by trac user mrclay, assigned to trac user mrclay.

    I've [http://mrclay.org/index.php/2010/10/17/elgg-core-proposal-new-table-entity_list_items/ posted a proposal] to add an "entity list" system (and at least one new table) in the core. This would greatly ease the creation of features like this:[[BR]] [[BR]]

    • A “featured items” widget for a group or user. On a group page this could be implemented in left/right lists for more display control[[BR]]
    • “Sticky” entities in discussion lists, or any other object lists[[BR]]
    • A “favorites” list for each user

    Working API plugin using relationships for storage: https://github.com/mrclay/Elgg-elggx_lists_api but I suggest the relationship schema move to lists.

    TODOs

    • [ ] Agree on a set of interfaces
    • [ ] Agree on a set of expected behaviors (tests)
    • [ ] Compile a list of use cases
    • [ ] Document usage pattern for these use cases

    Interfaces for discussion

    Open questions:

    • Naming conventions
    interface Entity {
      // properties
      function getGuid();
    
      // graph traversal
      function lists(): Map<string, EntityList>;
    }
    
    interface Relationship {
      // properties
      function getIndex(): int;
      function setIndex($index);
      function getTimeCreated(): DateTimeImmutable;
      function getWeight(): number;
      function setWeight($weight);
    
      // graph traversal
      function parent(): Entity;
      function child(): Entity;
    }
    
    interface EntityList extends Map<Entity, Relationship>, MutableSequence<Relationship> {
      // properties
      function getName(): string;
    
      // graph traversal
      function parent(): Entity;
      function children(): MutableSeries<Entity>;
    }
    
    interface MutableCollection<Y> extends Collection<T> {
      function add(T $item): void;
      function remove(T $item): void;
    }
    
    interface Sequence<T> extends Collection<T> {
      function getAt($index): T;
      function indexOf(T $item): int;
      function slice($startingAtThisIndex = 0, $returnThisNumberOfItems = 0): Series<T>;
    }
    
    interface MutableSequence<T> extends Sequence<T>, MutableCollection<T> {
      function insertAt($index, T $item): void;
      function removeAt($index): T;
      function splice($startingAtThisIndex = 0, $removeThisNumberOfItems = 0, T ...$andInsertTheseInTheirPlace): Series<T>;
    }
    
    interface Map<K, V> extends Collection<V> {
      function get(K $key): V;
    }
    
    interface MutableMap<K, V> extends Map<K, V> {
      function set(K $key, V $value): void;
    }
    

    There where method is probably the most mysterious (and difficult to implement). My idea here was to allow something like elgg_get_entities, but with a slightly cleaned up API:

    // All items in the List with a weight of exactly 1.0
    $list->where(['weight' => 1.0]);
    
    // All items in the List with a weight between 1.0 and 2.0
    $list->where([
      'weight' => [
        '>' => 1.0,
        '<' => 2.0,
      ]
    ]);
    

    I find it a little clearer than the QueryModifier concept, which is too vague (modify how, exactly?).

    Reviewed by elgg-gitbot at 2013-02-16 17:24
  • 12. Should we use vanilla/htmlawed ?

    Describe the feature

    htmlawed in this library is rarely updated although a new version has already been released.

    In addition, htmlawed is also available for use through composer.

    Is your feature request related to a problem?

    I'm always frustrated when [...]

    Describe alternatives you've considered

    No response

    Additional context

    No response

    Reviewed by RiverVanRain at 2022-08-10 12:52
  • 13. [Feature]: Combine events and hooks into a single system

    Describe the feature

    Internally there is no real difference between hooks and events (other than the intended usage). Combining these will reduce some of our API code and will also make things easier to understand.

    During this exercise we could also move to https://symfony.com/doc/current/components/event_dispatcher.html for the registration and triggers.

    Is your feature request related to a problem?

    No response

    Describe alternatives you've considered

    No response

    Additional context

    No response

    Reviewed by jdalsem at 2022-08-02 09:40
  • 14. should we drop site secret from file support

    If so, we can convert the initialisation to a 'normal' service. We might also save a query if we refactor it to be able to use config data (before it is stripped from sensitive data).

    Reviewed by jdalsem at 2022-07-26 09:19
  • 15. [Feature]: store menu items in the menu service not in config

    Describe the feature

    move from $CONFIG->menus to the menu service

    Is your feature request related to a problem?

    I'm always frustrated when [...]

    Describe alternatives you've considered

    No response

    Additional context

    No response

    Reviewed by jeabakker at 2022-07-18 13:37
  • 16. Prefix hook/event deprecation message

    When deprecating hooks/events we always need to add 'The hook x, y has been deprecated. ' Starting in Elgg 5.0 we could add this by default to all deprecated hooks/event.

    Look at the view deprecation for a similar solution.

    Reviewed by jdalsem at 2022-07-18 11:43
Motan - a cross-language remote procedure call(RPC) framework for rapid development of high performance distributed services

Motan-PHP Overview Motan is a cross-language remote procedure call(RPC) framework for rapid development of high performance distributed services.

Jun 16, 2022
FlyCubePHP is an MVC Web Framework developed in PHP and repeating the ideology and principles of building WEB applications, embedded in Ruby on Rails.

FlyCubePHP FlyCubePHP is an MVC Web Framework developed in PHP and repeating the ideology and principles of building WEB applications, embedded in Rub

Dec 21, 2021
Framework X – the simple and fast micro framework for building reactive web applications that run anywhere.

Framework X Framework X – the simple and fast micro framework for building reactive web applications that run anywhere. Quickstart Documentation Tests

Aug 9, 2022
Hamtaro - the new web framework for front-end / back-end development using Php and Javascript.

Hamtaro framework About Technologies Controllers Components Commands Front-end development Getting Started About Hamtaro is the new web framework for

May 14, 2022
Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs.

Slim Framework Slim is a PHP micro-framework that helps you quickly write simple yet powerful web applications and APIs. Installation It's recommended

Aug 10, 2022
A powerful yet easy-to-use PHP micro-framework designed to help you build dynamic and robust Web applications - fast!
A powerful yet easy-to-use PHP micro-framework designed to help you build dynamic and robust Web applications - fast!

A powerful yet easy-to-use PHP micro-framework designed to help you build dynamic and robust Web applications - fast! Condensed in a single ~65KB file

Jul 30, 2022
Woski is a fast and simple lightweight PHP Framework for building applications in the realm of the web.
Woski is a fast and simple lightweight PHP Framework for building applications in the realm of the web.

Woski is a simple fast PHP framework for the Realm The Project Installation Clone the repository $ composer create-project clintonnzedimma/woski myApp

Apr 13, 2022
Biny is a tiny, high-performance PHP framework for web applications

Biny is high performance. Framework comes default with response time of less than 1ms. Stand-alone QPS easily up to 3000.

Aug 5, 2022
TrailLamp is a lightweight, easy-to-use Php MVC framework that can be used to build web applications and REST APIs.

TrailLamp Introduction TrailLamp is a lightweight, easy-to-use Php MVC framework that can be used to build web applications and REST APIs. Installatio

Jun 10, 2022
A Small modular PHP framework Build for web applications

MagmaCore__ This project is in active development. So is evolving constantly. As soon project gets to stable point. Due notice will be given Composer

May 13, 2022
Open Source PHP Framework (originally from EllisLab)

What is CodeIgniter CodeIgniter is an Application Development Framework - a toolkit - for people who build web sites using PHP. Its goal is to enable

Aug 14, 2022
Open Source PHP Framework (originally from EllisLab)

CodeIgniter 4 Development What is CodeIgniter? CodeIgniter is a PHP full-stack web framework that is light, fast, flexible and secure. More informatio

Aug 15, 2022
High-Performance Long-Living PHP Framework for modern enterprise application development
High-Performance Long-Living PHP Framework for modern enterprise application development

Documentation · Discord · Telegram · Twitter Spiral Framework is a High-Performance Long-Living Full-Stack framework and group of over sixty PSR-compa

Aug 15, 2022
QPM, the process management framework in PHP, the efficient toolkit for CLI development. QPM provides basic daemon functions and supervision mechanisms to simplify multi-process app dev.

QPM QPM全名是 Quick(or Q's) Process Management Framework for PHP. PHP 是强大的web开发语言,以至于大家常常忘记PHP 可以用来开发健壮的命令行(CLI)程序以至于daemon程序。 而编写daemon程序免不了与各种进程管理打交道。Q

Dec 21, 2021
:gem: Go! AOP PHP - modern aspect-oriented framework for the new level of software development

Go! Aspect-Oriented Framework for PHP Go! AOP is a modern aspect-oriented framework in plain PHP with rich features for the new level of software deve

Jul 31, 2022
PHPLucidFrame (a.k.a LucidFrame) is an application development framework for PHP developers

PHPLucidFrame (a.k.a LucidFrame) is an application development framework for PHP developers. It provides logical structure and several helper utilities for web application development. It uses a functional architecture to simplify complex application development. It is especially designed for PHP, MySQL and Apache. It is simple, fast, lightweight and easy to install.

Apr 25, 2022
Pods is a development framework for creating, extending, managing, and deploying customized content types in WordPress.

Pods Framework Pods is a development framework for creating, extending, managing, and deploying customized content types in WordPress. Description Che

Aug 4, 2022
li₃ is the fast, flexible and most RAD development framework for PHP

li₃ You asked for a better framework. Here it is. li₃ is the fast, flexible and the most RAD development framework for PHP. A framework of firsts li₃

Aug 11, 2022
☄️ PHP CLI mode development framework, supports Swoole, WorkerMan, FPM, CLI-Serve
☄️  PHP CLI mode development framework, supports Swoole, WorkerMan, FPM, CLI-Serve

☄️ PHP CLI mode development framework, supports Swoole, WorkerMan, FPM, CLI-Server / PHP 命令行模式开发框架,支持 Swoole、WorkerMan、FPM、CLI-Server

Jul 31, 2022