1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

XF 1.1 How to deactivate direct links?

Discussion in 'XenForo Questions and Support' started by dosc, Jul 7, 2012.

  1. dosc

    dosc New Member

    ...
     
  2. Jake Bunce

    Jake Bunce XenForo Moderator Staff Member

    File edit:

    library/XenForo/BbCode/Formatter/Base.php

    Add the red code:

    Code:
    	public function renderTagUrl(array $tag, array $rendererStates)
    	{
    		if (!empty($tag['option']))
    		{
    			$url = $tag['option'];
    			$text = $this->renderSubTree($tag['children'], $rendererStates);
    		}
    		else
    		{
    			$url = $this->stringifyTree($tag['children']);
    			$text = urldecode($url);
    			if (!utf8_check($text))
    			{
    				$text = $url;
    			}
    			$text = XenForo_Helper_String::censorString($text);
    
    			if (!empty($rendererStates['shortenUrl']))
    			{
    				$length = utf8_strlen($text);
    				if ($length > 100)
    				{
    					$text = utf8_substr_replace($text, '...', 35, $length - 35 - 45);
    				}
    			}
    
    			$text = htmlspecialchars($text);
    		}
    
    		$url = $this->_getValidUrl($url);
    		if (!$url)
    		{
    			return $text;
    		}
    		else
    		{
    			list($class, $target, $type) = XenForo_Helper_String::getLinkClassTarget($url);
    			$class = $class ? " class=\"$class\"" : '';
    			$target = $target ? " target=\"$target\"" : '';
    			if ($type == 'internal')
    			{
    				$noFollow = '';
    			}
    			else
    			{
    				$noFollow = (empty($rendererStates['noFollowDefault']) ? '' : ' rel="nofollow"');
    			}
    
    			$url = XenForo_Helper_String::censorString($url);
    
    			// return '<a href="' . htmlspecialchars($url) . '"' . $target . $class . $noFollow . '>' . $text . '</a>';
    			return $text;
    		}
    	}
    
    Or this modification can be made into an addon that extends this class, similar to this:

    http://xenforo.com/community/threads/force-rich-code-tag.20317/
     
    Simon and dosc like this.
  3. Simon

    Simon Active Member

    This works very well for all users but is there a way I can allow only admin links to parse?
     
  4. Jake Bunce

    Jake Bunce XenForo Moderator Staff Member

    library/XenForo/BbCode/Formatter/Base.php

    Add the red code:

    Code:
    	/**
    	 * Renders a URL tag.
    	 *
    	 * @param array $tag Information about the tag reference; keys: tag, option, children
    	 * @param array $rendererStates Renderer states to push down
    	 *
    	 * @return string Rendered tag
    	 */
    	public function renderTagUrl(array $tag, array $rendererStates)
    	{
    		if (!empty($tag['option']))
    		{
    			$url = $tag['option'];
    			$text = $this->renderSubTree($tag['children'], $rendererStates);
    		}
    		else
    		{
    			$url = $this->stringifyTree($tag['children']);
    			$text = urldecode($url);
    			if (!preg_match('/./u', $text))
    			{
    				$text = $url;
    			}
    			$text = XenForo_Helper_String::censorString($text);
    
    			if (!empty($rendererStates['shortenUrl']))
    			{
    				$length = utf8_strlen($text);
    				if ($length > 100)
    				{
    					$text = utf8_substr_replace($text, '...', 35, $length - 35 - 45);
    				}
    			}
    
    			$text = htmlspecialchars($text);
    		}
    
    		$url = $this->_getValidUrl($url);
    		if (!$url)
    		{
    			return $text;
    		}
    		else
    		{
    			list($class, $target, $type) = XenForo_Helper_String::getLinkClassTarget($url);
    			$class = $class ? " class=\"$class\"" : '';
    			$target = $target ? " target=\"$target\"" : '';
    			if ($type == 'internal')
    			{
    				$noFollow = '';
    			}
    			else
    			{
    				$noFollow = (empty($rendererStates['noFollowDefault']) ? '' : ' rel="nofollow"');
    			}
    
    			$url = XenForo_Helper_String::censorString($url);
    
    			if (!empty($rendererStates['noFollowDefault']))
    			{
    				return $text;
    			}
    
    			return '<a href="' . htmlspecialchars($url) . '"' . $target . $class . $noFollow . '>' . $text . '</a>';
    		}
    	}
    
    This doesn't directly check the admin status, but the noFollow flag is always true for regular users and false for admins/mods, so it works in this case.
     
    AndyB likes this.

Share This Page