Overview
Comment: | Implement system signals and menu items |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
4e45704ba9a73e54fd6c31dc6f85e1ec |
User & Date: | bohwaz on 2022-05-13 00:00:41 |
Other Links: | manifest | tags |
Context
2022-05-13
| ||
00:22 | Add ability to append HTML to error messages check-in: d8b18c1b0d user: bohwaz tags: trunk | |
00:00 | Implement system signals and menu items check-in: 4e45704ba9 user: bohwaz tags: trunk | |
2022-05-06
| ||
13:39 | Implement belgian accounting charts for non-profits (PCMN 2019) check-in: aef2c67916 user: bohwaz tags: trunk, stable | |
Changes
Modified src/config.dist.php from [880bbf6dfe] to [2fc8f5c8d2].
︙ | ︙ | |||
134 135 136 137 138 139 140 141 142 143 144 145 146 147 | * Exemple : PLUGINS_SYSTEM = 'gestion_emails,factures' * * Défaut : aucun (chaîne vide) */ //const PLUGINS_SYSTEM = ''; /** * Adresse URI de la racine du site Garradin * (doit se terminer par un slash) * * Défaut : découverte automatique à partir de SCRIPT_NAME */ | > > > > > > > > > > > > > > > > > > > > > > > > > > | 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 | * Exemple : PLUGINS_SYSTEM = 'gestion_emails,factures' * * Défaut : aucun (chaîne vide) */ //const PLUGINS_SYSTEM = ''; /** * Signaux système * * Permet de déclencher des signaux sans passer par un plugin. * Le fonctionnement des signaux système est strictment identique aux signaux des plugins. * Les signaux système sont exécutés en premier, avant les signaux des plugins. * * Format : pour chaque signal, un tableau comprenant une seule clé et une seule valeur. * La clé est le nom du signal, et la valeur est la fonction. * * Défaut: [] (tableau vide) */ //const SYSTEM_SIGNALS = [['files.delete' => 'MyNamespace\Signals::deleteFile'], ['entity.Accounting\Transaction.save.before' => 'MyNamespace\Signals::saveTransaction']]; /** * Éléments du menu (sous-menu accueil) système * * Permet de rajouter des éléments au menu, en dessous de l'item "Accueil" * * Format: tableau de chaînes HTML, chaque chaîne sera un élément du sous-menu (tag <li>), * la clé étant l'identifiant "$current" permettant de sélectionner le sous-menu comme actif. * * Défaut: [] (tableau vide) */ //const SYSTEM_MENU_ITEMS = ['<a ']; /** * Adresse URI de la racine du site Garradin * (doit se terminer par un slash) * * Défaut : découverte automatique à partir de SCRIPT_NAME */ |
︙ | ︙ |
Modified src/include/init.php from [b90dc55e14] to [88ffffab8b].
︙ | ︙ | |||
211 212 213 214 215 216 217 218 219 220 221 222 223 224 | 'FILE_STORAGE_QUOTA' => null, 'API_USER' => null, 'API_PASSWORD' => null, 'PDF_COMMAND' => null, 'CALC_CONVERT_COMMAND' => null, 'CONTRIBUTOR_LICENSE' => null, 'SQL_DEBUG' => null, ]; foreach ($default_config as $const => $value) { $const = sprintf('Garradin\\%s', $const); if (!defined($const)) | > > | 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 | 'FILE_STORAGE_QUOTA' => null, 'API_USER' => null, 'API_PASSWORD' => null, 'PDF_COMMAND' => null, 'CALC_CONVERT_COMMAND' => null, 'CONTRIBUTOR_LICENSE' => null, 'SQL_DEBUG' => null, 'SYSTEM_MENU_ITEMS' => [], 'SYSTEM_SIGNALS' => [], ]; foreach ($default_config as $const => $value) { $const = sprintf('Garradin\\%s', $const); if (!defined($const)) |
︙ | ︙ |
Modified src/include/lib/Garradin/Entity.php from [370297ff9c] to [e47a8d6cfd].
︙ | ︙ | |||
75 76 77 78 79 80 81 | } } // Add plugin signals to save/delete public function save(): bool { $name = get_class($this); | | | 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | } } // Add plugin signals to save/delete public function save(): bool { $name = get_class($this); $name = str_replace('Garradin\Entities\\', '', $name); $name = 'entity.' . $name . '.save'; // Specific entity signal if (Plugin::fireSignal($name . '.before', ['entity' => $this])) { return true; } |
︙ | ︙ | |||
99 100 101 102 103 104 105 | return $return; } public function delete(): bool { $name = get_class($this); | | | 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | return $return; } public function delete(): bool { $name = get_class($this); $name = str_replace('Garradin\Entities\\', '', $name); $name = 'entity.' . $name . '.delete'; if (Plugin::fireSignal($name . '.before', ['entity' => $this])) { return true; } // Generic entity signal |
︙ | ︙ |
Modified src/include/lib/Garradin/Plugin.php from [7f46b25075] to [607eb942d9].
︙ | ︙ | |||
812 813 814 815 816 817 818 | /** * 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 si un plugin a été appelé et a arrêté l'exécution, | | > > > > > > > > > > > > > > > | 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 | /** * 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 si un plugin a été appelé et a arrêté l'exécution, * FALSE si des plugins ont été appelés mais aucun n'a stoppé l'exécution */ static public function fireSignal($signal, $params = null, &$callback_return = null) { // Process SYSTEM_SIGNALS first foreach (SYSTEM_SIGNALS as $system_signal) { if (key($system_signal) != $signal) { continue; } if (!is_callable(current($system_signal))) { throw new \LogicException(sprintf('System signal: cannot call "%s" for signal "%s"', current($system_signal), key($system_signal))); } if (true === call_user_func_array(current($system_signal), [&$params, &$callback_return])) { return true; } } $list = DB::getInstance()->get('SELECT * FROM plugins_signaux WHERE signal = ?;', $signal); if (!count($list)) { return null; } if (null === $params) { |
︙ | ︙ |
Modified src/templates/admin/_head.tpl from [db4d97f3be] to [d9d7c95995].
︙ | ︙ | |||
50 51 52 53 54 55 56 | {/if} <ul> {if $is_logged} <?php $current_parent = substr($current, 0, strpos($current, '/')); ?> <li class="home{if $current == 'home'} current{elseif $current_parent == 'home'} current_parent{/if}"><h3><a href="{$admin_url}"><b data-icn="{icon html=false shape="home"}"></b><span>Accueil</span></a></h3> | | > > > | 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | {/if} <ul> {if $is_logged} <?php $current_parent = substr($current, 0, strpos($current, '/')); ?> <li class="home{if $current == 'home'} current{elseif $current_parent == 'home'} current_parent{/if}"><h3><a href="{$admin_url}"><b data-icn="{icon html=false shape="home"}"></b><span>Accueil</span></a></h3> {if !empty($plugins_menu) || !empty(SYSTEM_MENU_ITEMS)} <ul> {foreach from=SYSTEM_MENU_ITEMS key="key" item="html"} <li{if $current == $key} class="current"{/if}>{$html|raw}</li> {/foreach} {foreach from=$plugins_menu key="plugin_id" item="name"} <li class="plugins {if $current == sprintf("plugin_%s", $plugin_id)} current{/if}"><a href="{plugin_url id=$plugin_id}">{$name}</a></li> {/foreach} </ul> {/if} </li> {if $session->canAccess($session::SECTION_USERS, $session::ACCESS_READ)} |
︙ | ︙ |