name = plugin_lang_get( 'title' ); $this->description = plugin_lang_get( 'description' ); $this->page = 'config'; $this->version = '0.1'; $this->requires = array( 'MantisCore' => '2.3.0-dev', /* Plugin loading uses a topological sort. It's important that we know * what order we load in with respect to MantisCoreFormatting, because * that also affects the order our event bindings run in: The plugin * that loads last, gets the event last. * * We would really prefer to load before MantisCoreFormatting, so that * we can both consume and output Markdown, rather than HTML. * Unfortunatly, the only way that we as a plugin can control that is * by declaring a dependency, which makes us run afterwards. Otherwise, * it winds up being unpredictable and depends on things such as which * plugins are force-installed. * * By tweaking the full system configuration at the nix level, we'd have * the ability to run before, but it's best if MantisSmalltech doesn't * require nix. * * So, we run at the end, and deal with the limitations that come with * working in HTML. */ 'MantisCoreFormatting' => '2.3.0-dev', ); $this->author = 'Irene Knapp'; $this->contact = 'ireneista@internetsafetylabs.org'; $this->url = 'https://irenes.space'; /* The MantisCoreFormatting plugin already does bug links. We could * reimplement its logic, but it's simpler to just override its * configuration. We set it in memory, not in the database, so that * uninstalling MantisSmalltech will change it back. * * MantisCoreFormatting also has an "issue note" syntax, for links within * a single issue thread. We leave that one at its default. */ config_set_global( 'bug_link_tag', 'b/', true ); } /** * plugin hooks * @return array */ function hooks() { $t_hooks = array( 'EVENT_DISPLAY_BUG_ID' => 'display_bug_id', 'EVENT_DISPLAY_FORMATTED' => 'display_formatted', ); return $t_hooks; } /** * Default plugin configuration. * @return array */ function config() { return array( 'process_gerrit_links' => ON ); } function display_bug_id( $p_event_name, $p_string, $p_number ) { return sprintf( 'b/%u', $p_number ); } function display_formatted( $p_event, $p_string, $p_multiline = true ): string { /* This is better documented in the Gerrit config. If you read that one * first, it's quite similar, except that Mantis leaves apostrophes alone. */ $p_string = preg_replace( '/(?<=(?:^|(?<=\\s|>)))((?:[\\(\\[\\{\']|")*)' . 'cl\\/(\\d+)' . '(?=(?:[\\.,;?!\\)\\]\\}\']|")*(?:$|(?=\\s|<)))/', '\\1cl/\\2', $p_string); return $p_string; } }