Overview
Comment:Plugins: On n'autorise que les tirets bas dans l'ID et on corrige le retour de fireSignal
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | dev
Files: files | file ages | folders
SHA1: 838bbe11035ca3bac0608374fd1984aba63d1000
User & Date: bohwaz on 2018-08-18 23:47:36
Other Links: branch diff | manifest | tags
Context
2018-08-19
00:42
Utiliser les nouvelles méthodes de Smartyer pour le répertoire de templates et de compilation check-in: 1221955cc8 user: bohwaz tags: dev
2018-08-18
23:47
Plugins: On n'autorise que les tirets bas dans l'ID et on corrige le retour de fireSignal check-in: 838bbe1103 user: bohwaz tags: dev
21:39
Ajout d'un signal accueil.banniere qui permet à un plugin d'afficher une bannière sur la page d'accueil check-in: f2539b4cef user: bohwaz tags: dev
Changes

Modified src/include/lib/Garradin/Plugin.php from [f8fa22feff] to [0592a14b2f].

1
2
3
4
5
6


7
8
9
10
11
12
13
<?php

namespace Garradin;

class Plugin
{


	protected $id = null;
	protected $plugin = null;
	protected $config_changed = false;

	protected $mimes = [
		'css' => 'text/css',
		'gif' => 'image/gif',






>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php

namespace Garradin;

class Plugin
{
	const PLUGIN_ID_SYNTAX = '[a-z]+(?:_[a-z]+)*';

	protected $id = null;
	protected $plugin = null;
	protected $config_changed = false;

	protected $mimes = [
		'css' => 'text/css',
		'gif' => 'image/gif',
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
		$dir = dir(PLUGINS_ROOT);

		while ($file = $dir->read())
		{
			if (substr($file, 0, 1) == '.')
				continue;

			if (preg_match('!^([a-z0-9_]+)\.tar\.gz$!i', $file, $match))
			{
				// Sélectionner les archives PHAR
				$file = $match[1];
			}
			elseif (is_dir(PLUGINS_ROOT . '/' . $file)
				&& preg_match('!^([a-z0-9_]+)$!i', $file)
				&& is_file(sprintf('%s/%s/garradin_plugin.ini', PLUGINS_ROOT, $file)))
			{
				// Rien à faire, le nom valide du plugin est déjà dans "$file"
			}
			else
			{
				// ignorer tout ce qui n'est pas un répertoire ou une archive PHAR valides







|





|







448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
		$dir = dir(PLUGINS_ROOT);

		while ($file = $dir->read())
		{
			if (substr($file, 0, 1) == '.')
				continue;

			if (preg_match('!^(' . self::PLUGIN_ID_SYNTAX . ')\.tar\.gz$!', $file, $match))
			{
				// Sélectionner les archives PHAR
				$file = $match[1];
			}
			elseif (is_dir(PLUGINS_ROOT . '/' . $file)
				&& preg_match('!^' . self::PLUGIN_ID_SYNTAX . '$!', $file)
				&& is_file(sprintf('%s/%s/garradin_plugin.ini', PLUGINS_ROOT, $file)))
			{
				// Rien à faire, le nom valide du plugin est déjà dans "$file"
			}
			else
			{
				// ignorer tout ce qui n'est pas un répertoire ou une archive PHAR valides
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738

	/**
	 * Déclenche le signal donné auprès des plugins enregistrés
	 * @param  string $signal Nom du signal
	 * @param  array  $params Paramètres du callback (array ou null)
	 * @return NULL 		  NULL si aucun plugin n'a été appelé, true sinon
	 */
	static public function fireSignal($signal, $params = null, &$return = null)
	{
		$list = DB::getInstance()->get('SELECT * FROM plugins_signaux WHERE signal = ?;', $signal);

		foreach ($list as $row)
		{
			$return = call_user_func_array('Garradin\\Plugin\\' . $row->callback, [&$params, &$return]);

			if ($return)
			{
				return true;
			}
		}

		return !empty($list) ? false : null;
	}
}







|





|



|






717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740

	/**
	 * Déclenche le signal donné auprès des plugins enregistrés
	 * @param  string $signal Nom du signal
	 * @param  array  $params Paramètres du callback (array ou null)
	 * @return NULL 		  NULL si aucun plugin n'a été appelé, true sinon
	 */
	static public function fireSignal($signal, $params = null, &$callback_return = null)
	{
		$list = DB::getInstance()->get('SELECT * FROM plugins_signaux WHERE signal = ?;', $signal);

		foreach ($list as $row)
		{
			$return = call_user_func_array('Garradin\\Plugin\\' . $row->callback, [&$params, &$callback_return]);

			if ($return)
			{
				return $return;
			}
		}

		return !empty($list) ? false : null;
	}
}