[MODULES] Rename extensions to modules, add example plugin, change plugin location

This commit is contained in:
Hugo Sales 2020-03-28 14:39:48 +00:00 committed by Hugo Sales
parent 596009c924
commit 0c79dfc67b
No known key found for this signature in database
GPG Key ID: 7D0C7EAFC9D835A0
8 changed files with 47 additions and 21 deletions

2
.gitignore vendored
View File

@ -19,5 +19,3 @@
!.php_cs !.php_cs
/.php_cs.cache /.php_cs.cache
###< friendsofphp/php-cs-fixer ### ###< friendsofphp/php-cs-fixer ###
plugins/available

View File

@ -0,0 +1,14 @@
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
class TestController extends AbstractController
{
public function __invoke()
{
return new Response('<div style="background: #333; text: #999"> Test controller </div>');
}
}

View File

@ -0,0 +1,15 @@
info:
name: 'Example'
version: '0.1'
author: 'Hugo Sales'
homepage: '{project_url}'
description: |
Test plugin
Description can use multiple lines
permissions:
database:
- 'table1': 'r'
- 'table2': 'rw'
filesystem:
- 'folder': 'rw'

View File

@ -1 +0,0 @@
../available/Test/

View File

@ -49,21 +49,21 @@ class Kernel extends BaseKernel
{ {
parent::__construct($environment, $debug); parent::__construct($environment, $debug);
if (!\defined('INSTALLDIR')) { if (!defined('INSTALLDIR')) {
define('INSTALLDIR', dirname(__DIR__)); define('INSTALLDIR', dirname(__DIR__));
define('SRCDIR', INSTALLDIR . '/src'); define('SRCDIR', INSTALLDIR . '/src');
define('PUBLICDIR', INSTALLDIR . '/public'); define('PUBLICDIR', INSTALLDIR . '/public');
define('GNUSOCIAL_ENGINE', 'GNU social'); define('GS_ENGINE_NAME', 'GNU social');
// MERGE Change to https://gnu.io/social/ // MERGE Change to https://gnu.io/social/
define('GNUSOCIAL_ENGINE_URL', 'https://gnusocial.network/'); define('GS_PROJECT_URL', 'https://gnusocial.network/');
// MERGE Change to https://git.gnu.io/gnu/gnu-social // MERGE Change to https://git.gnu.io/gnu/gnu-social
define('GNUSOCIAL_ENGINE_REPO_URL', 'https://notabug.org/diogo/gnu-social/'); define('GS_REPOSITORY_URL', 'https://notabug.org/diogo/gnu-social/');
// Current base version, major.minor.patch // Current base version, major.minor.patch
define('GNUSOCIAL_BASE_VERSION', '3.0.0'); define('GS_BASE_VERSION', '3.0.0');
// 'dev', 'alpha[0-9]+', 'beta[0-9]+', 'rc[0-9]+', 'release' // 'dev', 'alpha[0-9]+', 'beta[0-9]+', 'rc[0-9]+', 'release'
define('GNUSOCIAL_LIFECYCLE', 'dev'); define('GS_LIFECYCLE', 'dev');
define('GNUSOCIAL_VERSION', GNUSOCIAL_BASE_VERSION . '-' . GNUSOCIAL_LIFECYCLE); define('GS_VERSION', GS_BASE_VERSION . '-' . GS_LIFECYCLE);
define('GNUSOCIAL_CODENAME', 'Big bang'); define('GS_CODENAME', 'Big bang');
// Work internally in UTC // Work internally in UTC
date_default_timezone_set('UTC'); date_default_timezone_set('UTC');

View File

@ -68,14 +68,14 @@ class GNUsocial implements EventSubscriberInterface
} }
/** /**
* Store these services to be accessed statically and load extensions * Store these services to be accessed statically and load modules
*/ */
public function register(EventDispatcherInterface $event_dispatcher): void public function register(EventDispatcherInterface $event_dispatcher): void
{ {
Log::setLogger($this->logger); Log::setLogger($this->logger);
GSEvent::setDispatcher($event_dispatcher); GSEvent::setDispatcher($event_dispatcher);
I18n::setTranslator($this->translator); I18n::setTranslator($this->translator);
ExtensionManager::loadExtensions(); ModulesManager::loadModules();
} }
/** /**

View File

@ -18,13 +18,13 @@
*/ */
/** /**
* Extension loader code, one of the main features of GNU social * Module and plugin loader code, one of the main features of GNU social
* *
* Loads plugins from `plugins/enabled`, instances them * Loads plugins from `plugins/enabled`, instances them
* and hooks its events * and hooks its events
* *
* @package GNUsocial * @package GNUsocial
* @category Extensions * @category Modules
* *
* @author Hugo Sales <hugo@fc.up.pt> * @author Hugo Sales <hugo@fc.up.pt>
* @copyright 2020 Free Software Foundation, Inc http://www.fsf.org * @copyright 2020 Free Software Foundation, Inc http://www.fsf.org
@ -36,21 +36,21 @@ namespace App\Util;
use App\Util\GSEvent as Event; use App\Util\GSEvent as Event;
use Functional as F; use Functional as F;
abstract class ExtensionManager abstract class ModulesManager
{ {
public static array $extensions = []; public static array $modules = [];
public static function loadExtensions() public static function loadModules()
{ {
$plugins_paths = glob(INSTALLDIR . '/plugins/enabled/*'); $plugins_paths = glob(INSTALLDIR . '/plugins/*');
foreach ($plugins_paths as $plugin_path) { foreach ($plugins_paths as $plugin_path) {
$class_name = basename($plugin_path); $class_name = basename($plugin_path);
$qualified = 'Plugin\\' . $class_name . '\\' . $class_name; $qualified = 'Plugin\\' . $class_name . '\\' . $class_name;
require_once $plugin_path . '/' . $class_name . '.php'; require_once $plugin_path . '/' . $class_name . '.php';
$class = new $qualified; $class = new $qualified;
self::$extensions[] = $class; self::$modules[] = $class;
// Register event handlers // Register event handlers
$methods = get_class_methods($class); $methods = get_class_methods($class);