Making WordPress.org

Ticket #1674: trac-links.php

File trac-links.php, 1.8 KB (added by dd32, 9 years ago)
Line 
1<?php
2/*
3Plugin Name: Trac Links
4Plugin URI: https://wordpress.org/
5Description: Link ticket and changeset numbers to core.trac.
6Version: 1.0
7Author: WordPress.org
8Author URI: https://wordpress.org/
9*/
10
11add_filter( 'the_content', 'markup_wporg_links', 10, 1 );
12add_filter( 'comment_text', 'markup_wporg_links', 10, 1 );
13
14function markup_wporg_links( $content ) {
15        $url = parse_url( home_url( '/' ) );
16        $url = untrailingslashit( $url['host'] . $url['path'] );
17
18        switch( $url ) {
19                case 'make.wordpress.org/meta':
20                case 'make.wordpress.org/community':
21                        $trac = 'meta';
22                        break;
23
24                default:
25                        $trac = 'core';
26                        break;
27        }
28
29        $find = array(
30                '/(\s|^|\()(#(\d{4,5}))(\b|$)/im', // core  trac ticket #1234-core in http://core.trac.wordpress.org/ticket/
31                '/(\s|^|\()(r(\d{4,5}))(\b|$)/im', // core changeset r1234-core in http://core.trac.wordpress.org/changeset/1234
32                '/(?<!\w)\[(\d{4,5})\](?!\w)/im', // core changeset [12345]
33                '/(?<!\w)\[(\d{4,5})-(\d{4,5})\](?!\w)/im', // core log [12345-54321]
34                '/(\s|^|\()(diff:@(\d{4,5}):(\d{4,5}))(\b|$)/im', // core diff diff-core:@20:30 https://core.trac.wordpress.org/changeset?new=30&old=20
35        );
36
37        $replace = array(
38                '$1<a href="https://'. $trac .'.trac.wordpress.org/ticket/$3">$2</a>', // trac ticket
39                '$1<a href="https://'. $trac .'.trac.wordpress.org/changeset/$3">$2</a>', // trac changeset
40                '<a href="https://'. $trac .'.trac.wordpress.org/changeset/$1">$0</a>', // trac changeset
41                '<a href="https://'. $trac .'.trac.wordpress.org/log/?revs=$1-$2">$0</a>', // trac log
42                '$1<a href="https://'. $trac .'.trac.wordpress.org/changeset?new=$4&old=$3">$2</a>', // diff
43        );
44
45        preg_match_all('#[^>]+(?=<[^/]*[^a])|[^>]+$#', $content, $matches, PREG_SET_ORDER);
46
47        foreach ( $matches as $val ) {
48                $content = str_replace($val[0],preg_replace($find,$replace,$val[0]),$content);
49        }
50
51        return $content;
52}
53