View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0008757 | mantisbt | integration | public | 2008-01-16 17:43 | 2012-04-11 06:29 |
Reporter | foo | Assigned To | vboctor | ||
Priority | normal | Severity | feature | Reproducibility | N/A |
Status | closed | Resolution | fixed | ||
Product Version | 1.1.0 | ||||
Fixed in Version | 1.2.0a1 | ||||
Summary | 0008757: Add wiki integration for TWiki | ||||
Description | Attached is my first stab at TWiki integration, based off the xwiki code. I've tested it against TWiki 4.1.2 and Mantis 1.1.0, and everything seems to work for me. To make the TWiki integration, well, more TWiki-like, I used the following formatting conventions:
The last one is kinda ghetto, but was the only thing I could think of right off that would make acronyms, single words, or numeric project names into valid WikiWords. I figure it's worth the trade off of not having all the existing TWiki users complain that the titles won't link. | ||||
Tags | wiki | ||||
Attached Files | wiki_twiki_api.php (3,352 bytes)
<?php # Mantis - a php based bugtracking system # Copyright (C) 2000 - 2002 Kenzaburo Ito - kenito@300baud.org # Copyright (C) 2002 - 2007 Mantis Team - mantisbt-dev@lists.sourceforge.net # Mantis is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Mantis is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Mantis. If not, see <http://www.gnu.org/licenses/>. # -------------------------------------------------------- # $Id: # -------------------------------------------------------- # ---------------------- # Gets the URL for the page with the specified page id. This function is used # internally by this API. function wiki_twiki_get_url_for_page_id( $p_page_id ) { $t_root_url = config_get_global( 'wiki_engine_url' ); return $t_root_url . $p_page_id ; } # ---------------------- # Gets the page id for the specified issue. The page id can then be converted # to a URL using wiki_twiki_get_url_for_page_id(). function wiki_twiki_get_page_id_for_issue( $p_issue_id ) { $t_project_id = project_get_name (bug_get_field( $p_issue_id, 'project_id' )); $c_issue_id = 'IssueNumber' . db_prepare_int( $p_issue_id ); return $c_issue_id; return $t_project_id.'/'.$c_issue_id; } # ---------------------- # Gets the page url for the specified issue id. function wiki_twiki_get_url_for_issue( $p_issue_id ) { return wiki_twiki_get_url_for_page_id( wiki_twiki_get_page_id_for_issue( $p_issue_id ) ); } # ---------------------- # Gets the page id for the specified project. The project id can be ALL_PROJECTS # The page id can then be converted to URL using wiki_twiki_get_url_for_page_id(). function wiki_twiki_get_page_id_for_project( $p_project_id ) { if ( $p_project_id == ALL_PROJECTS ) { return config_get( 'wiki_root_namespace' ); } else { $t_project_name = project_get_name( $p_project_id ); $wikiword_regex = '/^[A-Z][^A-Z]+[A-Z]+.*$/'; // Normalize (remove) all whitespace $project_name_normalized = preg_replace('/\s\s*/', '', $t_project_name); // Try uppercasing each word first $project_name_uppercased = preg_replace('/\s\s*/', '', ucwords($t_project_name)); // Then try adding 'ProjectName' to the front $project_name_prepended = "ProjectName" . preg_replace('/\s\s*/', '', ucwords($t_project_name)); // See if normalized name looks like a WikiWord if (preg_match($wikiword_regex, $project_name_normalized, $matches)){ return $project_name_normalized; }elseif (preg_match($wikiword_regex, $project_name_uppercased, $matches)){ return $project_name_uppercased; }else { return $project_name_prepended; } } } # ---------------------- # Get URL for the specified project id. The project is can be ALL_PROJECTS. function wiki_twiki_get_url_for_project( $p_project_id ) { return wiki_twiki_get_url_for_page_id( wiki_twiki_get_page_id_for_project( $p_project_id ) ); } ?> wiki_twiki_api_v2.php (3,181 bytes)
<?php # Mantis - a php based bugtracking system # Copyright (C) 2000 - 2002 Kenzaburo Ito - kenito@300baud.org # Copyright (C) 2002 - 2007 Mantis Team - mantisbt-dev@lists.sourceforge.net # Mantis is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Mantis is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Mantis. If not, see <http://www.gnu.org/licenses/>. # -------------------------------------------------------- # $Id: # -------------------------------------------------------- # ---------------------- # Gets the URL for the page with the specified page id. This function is used # internally by this API. function wiki_twiki_get_url_for_page_id( $p_page_id ) { $t_root_url = config_get_global( 'wiki_engine_url' ); $t_wiki_namespace = config_get( 'wiki_root_namespace' ); return $t_root_url . $t_wiki_namespace . '/' . $p_page_id ; } # ---------------------- # Gets the page id for the specified issue. The page id can then be converted # to a URL using wiki_twiki_get_url_for_page_id(). function wiki_twiki_get_page_id_for_issue( $p_issue_id ) { return 'IssueNumber' . db_prepare_int( $p_issue_id ); } # ---------------------- # Gets the page url for the specified issue id. function wiki_twiki_get_url_for_issue( $p_issue_id ) { return wiki_twiki_get_url_for_page_id( wiki_twiki_get_page_id_for_issue( $p_issue_id ) ); } # ---------------------- # Gets the page id for the specified project. The project id can be ALL_PROJECTS # The page id can then be converted to URL using wiki_twiki_get_url_for_page_id(). function wiki_twiki_get_page_id_for_project( $p_project_id ) { if ( $p_project_id == ALL_PROJECTS ) { return; } else { $t_project_name = project_get_name( $p_project_id ); $wikiword_regex = '/^[A-Z][^A-Z]+[A-Z]+.*$/'; // Normalize (remove) all whitespace $project_name_normalized = preg_replace('/\s\s*/', '', $t_project_name); if (preg_match($wikiword_regex, $project_name_normalized, $matches)){ return $project_name_normalized; } // Try uppercasing each word first $project_name_uppercased = preg_replace('/\s\s*/', '', ucwords($t_project_name)); if (preg_match($wikiword_regex, $project_name_uppercased, $matches)){ return $project_name_uppercased; } // Then try adding 'ProjectName' to the front $project_name_prepended = "ProjectName" . preg_replace('/\s\s*/', '', ucwords($t_project_name)); return $project_name_prepended; } } # ---------------------- # Get URL for the specified project id. The project is can be ALL_PROJECTS. function wiki_twiki_get_url_for_project( $p_project_id ) { return wiki_twiki_get_url_for_page_id( wiki_twiki_get_page_id_for_project( $p_project_id ) ); } ?> wiki_twiki_api_v3.php (3,212 bytes)
<?php # Mantis - a php based bugtracking system # Copyright (C) 2000 - 2002 Kenzaburo Ito - kenito@300baud.org # Copyright (C) 2002 - 2008 Mantis Team - mantisbt-dev@lists.sourceforge.net # Mantis is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Mantis is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Mantis. If not, see <http://www.gnu.org/licenses/>. # -------------------------------------------------------- # $Id: # -------------------------------------------------------- # ---------------------- # Gets the URL for the page with the specified page id. This function is used # internally by this API. function wiki_twiki_get_url_for_page_id( $p_page_id ) { $t_root_url = config_get_global( 'wiki_engine_url' ); $t_wiki_namespace = config_get( 'wiki_root_namespace' ); return $t_root_url . $t_wiki_namespace . '/' . $p_page_id ; } # ---------------------- # Gets the page id for the specified issue. The page id can then be converted # to a URL using wiki_twiki_get_url_for_page_id(). function wiki_twiki_get_page_id_for_issue( $p_issue_id ) { return 'IssueNumber' . db_prepare_int( $p_issue_id ); } # ---------------------- # Gets the page url for the specified issue id. function wiki_twiki_get_url_for_issue( $p_issue_id ) { return wiki_twiki_get_url_for_page_id( wiki_twiki_get_page_id_for_issue( $p_issue_id ) ); } # ---------------------- # Gets the page id for the specified project. The project id can be ALL_PROJECTS # The page id can then be converted to URL using wiki_twiki_get_url_for_page_id(). function wiki_twiki_get_page_id_for_project( $p_project_id ) { if ( $p_project_id == ALL_PROJECTS ) { return ''; } $t_project_name = project_get_name( $p_project_id ); $wikiword_regex = '/^[A-Z][^A-Z]+[A-Z]+.*$/'; // Normalize (remove) all whitespace $t_project_name_normalized = preg_replace( '/\s\s*/', '', $t_project_name ); if ( preg_match( $wikiword_regex, $t_project_name_normalized, $matches ) ) { return $t_project_name_normalized; } // Try uppercasing each word first $t_project_name_uppercased = preg_replace( '/\s\s*/', '', ucwords( $t_project_name_normalized ) ); if ( preg_match( $wikiword_regex, $t_project_name_uppercased, $matches ) ) { return $t_project_name_uppercased; } // Then try adding 'ProjectName' to the front $t_project_name_prepended = 'ProjectName' . preg_replace( '/\s\s*/', '', ucwords( $t_project_name_uppercased ) ); return $t_project_name_prepended; } # ---------------------- # Get URL for the specified project id. The project is can be ALL_PROJECTS. function wiki_twiki_get_url_for_project( $p_project_id ) { return wiki_twiki_get_url_for_page_id( wiki_twiki_get_page_id_for_project( $p_project_id ) ); } ?> | ||||
related to | 0014146 | confirmed | integration with TWiki does not work out of the box |
|
|
1) Yeah, that's in wiki_xwiki_api.php as well, now that I look at it - looks like an earlier copy-paste error. 2) I was totally misusing the namespace as a default wiki page for ALL PROJECTS, because there wasn't a "home" page of sorts in my TWiki install. That was lame. I just didn't like the idea setting up a separate TWiki instance for Mantis-related pages if I didn't want to, as not all users would have that ability. I guess it would be better to do that, or define a config value for a default wiki page (called Mantis Issues, or Bug Tracking or something). 3) Good call - I'll test that and attach the fixed version tomorrow. 4) Will do. |
|
Uploaded new wiki_twiki_api.php file, which cleaned things up to properly use the wiki namespace config, address Victor's comments, and better describe how to use it. More deatails will be in the wiki. |
|
We have this running in production now, and so far so good. However, I've noticed that browsing away from Mantis can get a little annoying after a while. I added a top link back to Mantis from TWiki, but was wondering; how difficult it would be to make wiki links open in a new window? I was thinking you could have a default config option like this: When set to ON, wiki links would always open in a specific target, like "mantis_wiki" or something. I know lots of people are anti-new window, but heavy users of systems like defect trackers are probably accustomed to multi-window environments. I know I'd like the option of keeping the wiki and Mantis in their own windows, and just have links open where I want them to. Thoughts? Maybe I should put this in the forum and see what people think. |
|
Thanks for putting together the wiki page.
|
|
No problem.
|
|
Ack, still don't know why the new config vars I create come back empty. Is there something else I need to do? |
|
Fixed in 4984 |
|