]> git.mxchange.org Git - friendica.git/blob - library/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/Nofollow.php
Merge pull request #2334 from fabrixxm/feature_autoloader
[friendica.git] / library / ezyang / htmlpurifier / library / HTMLPurifier / AttrTransform / Nofollow.php
1 <?php
2
3 // must be called POST validation
4
5 /**
6  * Adds rel="nofollow" to all outbound links.  This transform is
7  * only attached if Attr.Nofollow is TRUE.
8  */
9 class HTMLPurifier_AttrTransform_Nofollow extends HTMLPurifier_AttrTransform
10 {
11     /**
12      * @type HTMLPurifier_URIParser
13      */
14     private $parser;
15
16     public function __construct()
17     {
18         $this->parser = new HTMLPurifier_URIParser();
19     }
20
21     /**
22      * @param array $attr
23      * @param HTMLPurifier_Config $config
24      * @param HTMLPurifier_Context $context
25      * @return array
26      */
27     public function transform($attr, $config, $context)
28     {
29         if (!isset($attr['href'])) {
30             return $attr;
31         }
32
33         // XXX Kind of inefficient
34         $url = $this->parser->parse($attr['href']);
35         $scheme = $url->getSchemeObj($config, $context);
36
37         if ($scheme->browsable && !$url->isLocal($config, $context)) {
38             if (isset($attr['rel'])) {
39                 $rels = explode(' ', $attr['rel']);
40                 if (!in_array('nofollow', $rels)) {
41                     $rels[] = 'nofollow';
42                 }
43                 $attr['rel'] = implode(' ', $rels);
44             } else {
45                 $attr['rel'] = 'nofollow';
46             }
47         }
48         return $attr;
49     }
50 }
51
52 // vim: et sw=4 sts=4