diff options
Diffstat (limited to 'plugins/jetpack/vendor/nojimage/twitter-text-php/lib/Twitter/Text/Validator.php')
-rw-r--r-- | plugins/jetpack/vendor/nojimage/twitter-text-php/lib/Twitter/Text/Validator.php | 258 |
1 files changed, 258 insertions, 0 deletions
diff --git a/plugins/jetpack/vendor/nojimage/twitter-text-php/lib/Twitter/Text/Validator.php b/plugins/jetpack/vendor/nojimage/twitter-text-php/lib/Twitter/Text/Validator.php new file mode 100644 index 00000000..50dea27c --- /dev/null +++ b/plugins/jetpack/vendor/nojimage/twitter-text-php/lib/Twitter/Text/Validator.php @@ -0,0 +1,258 @@ +<?php + +/** + * @author Nick Pope <nick@nickpope.me.uk> + * @copyright Copyright © 2010, Nick Pope + * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License v2.0 + * @package Twitter.Text + */ + +namespace Twitter\Text; + +/** + * Twitter Validator Class + * + * Performs "validation" on tweets. + * + * Originally written by {@link http://github.com/mikenz Mike Cochrane}, this + * is based on code by {@link http://github.com/mzsanford Matt Sanford} and + * heavily modified by {@link http://github.com/ngnpope Nick Pope}. + * + * @author Nick Pope <nick@nickpope.me.uk> + * @copyright Copyright © 2010, Nick Pope + * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License v2.0 + * @package Twitter.Text + */ +class Validator +{ + /** + * + * @var Extractor + */ + protected $extractor; + + /** + * + * @var Configuration + */ + protected $config; + + /** + * Provides fluent method chaining. + * + * @param Configuration $config A Twitter Text Configuration + * + * @see __construct() + * + * @return Validator + */ + public static function create(Configuration $config = null) + { + return new self($config); + } + + /** + * Reads in a tweet to be parsed and validates it. + * + * @param Configuration $config A Twitter Text Configuration + */ + public function __construct(Configuration $config = null) + { + $this->setConfiguration($config); + $this->extractor = Extractor::create(); + } + + /** + * Setup configuration + * + * @see Configuration + * + * @param Configuration $config + * @return Validator + * @throws \InvalidArgumentException + */ + public function setConfiguration(Configuration $config = null) + { + if ($config === null) { + // default use v2 config + $this->config = new Configuration(); + } elseif (is_a($config, '\Twitter\Text\Configuration')) { + $this->config = $config; + } else { + throw new \InvalidArgumentException('Invalid Configuration'); + } + + return $this; + } + + /** + * Get current configuration + * + * @return Configuration + */ + public function getConfiguration() + { + return $this->config; + } + + /** + * Check whether a tweet is valid. + * + * @param string $tweet The tweet to validate. + * @param Configuration $config using configuration + * @return boolean Whether the tweet is valid. + * @deprecated instead use \Twitter\Text\Parser::parseText() + */ + public function isValidTweetText($tweet, Configuration $config = null) + { + + return $this->parseTweet($tweet, $config)->valid; + } + + /** + * Check whether a username is valid. + * + * @param string $username The username to validate. + * @return boolean Whether the username is valid. + */ + public function isValidUsername($username) + { + $length = StringUtils::strlen($username); + if (empty($username) || !$length) { + return false; + } + $extracted = $this->extractor->extractMentionedScreennames($username); + return count($extracted) === 1 && $extracted[0] === substr($username, 1); + } + + /** + * Check whether a list is valid. + * + * @param string $list The list name to validate. + * @return boolean Whether the list is valid. + */ + public function isValidList($list) + { + $length = StringUtils::strlen($list); + if (empty($list) || !$length) { + return false; + } + + if (preg_match(Regex::getValidMentionsOrListsMatcher(), $list, $matches)) { + $matches = array_pad($matches, 5, ''); + + return $matches[1] === '' && !empty($matches[4]) && $matches[4] && $matches[5] === ''; + } + + return false; + } + + /** + * Check whether a hashtag is valid. + * + * @param string $hashtag The hashtag to validate. + * @return boolean Whether the hashtag is valid. + */ + public function isValidHashtag($hashtag) + { + $length = StringUtils::strlen($hashtag); + if (empty($hashtag) || !$length) { + return false; + } + $extracted = $this->extractor->extractHashtags($hashtag); + return count($extracted) === 1 && $extracted[0] === substr($hashtag, 1); + } + + /** + * Check whether a URL is valid. + * + * @param string $url The url to validate. + * @param boolean $unicode_domains Consider the domain to be unicode. + * @param boolean $require_protocol Require a protocol for valid domain? + * + * @return boolean Whether the URL is valid. + */ + public function isValidURL($url, $unicode_domains = true, $require_protocol = true) + { + $length = StringUtils::strlen($url); + if (empty($url) || !$length) { + return false; + } + + preg_match(Regex::getValidateUrlUnencodedMatcher(), $url, $matches); + $match = array_shift($matches); + if (!$matches || $match !== $url) { + return false; + } + + list($scheme, $authority, $path, $query, $fragment) = array_pad($matches, 5, ''); + + # Check scheme, path, query, fragment: + if ( + ($require_protocol && !( + self::isValidMatch($scheme, Regex::getValidateUrlSchemeMatcher()) + && preg_match('/^https?$/i', $scheme) + )) + || !self::isValidMatch($path, Regex::getValidateUrlPathMatcher()) + || !self::isValidMatch($query, Regex::getValidateUrlQueryMatcher(), true) + || !self::isValidMatch($fragment, Regex::getValidateUrlFragmentMatcher(), true) + ) { + return false; + } + + # Check authority: + $authorityPattern = $unicode_domains ? + Regex::getValidateUrlUnicodeAuthorityMatcher() : + Regex::getValidateUrlAuthorityMatcher(); + + return self::isValidMatch($authority, $authorityPattern); + } + + /** + * Determines the length of a tweet. Takes shortening of URLs into account. + * + * @param string $tweet The tweet to validate. + * @param Configuration $config using configuration + * @return int the length of a tweet. + * @deprecated instead use \Twitter\Text\Parser::parseTweet() + */ + public function getTweetLength($tweet, Configuration $config = null) + { + return $this->parseTweet($tweet, $config)->weightedLength; + } + + /** + * A helper function to check for a valid match. Used in URL validation. + * + * @param string $string The subject string to test. + * @param string $pattern The pattern to match against. + * @param boolean $optional Whether a match is compulsory or not. + * + * @return boolean Whether an exact match was found. + */ + protected static function isValidMatch($string, $pattern, $optional = false) + { + $found = preg_match($pattern, $string, $matches); + if (!$optional) { + return (($string || $string === '') && $found && $matches[0] === $string); + } + + return !(($string || $string === '') && (!$found || $matches[0] !== $string)); + } + + /** + * Parse tweet + * + * @param string $tweet The tweet to parse. + * @param Configuration|null $config using configuration + * @return ParseResults + */ + private function parseTweet($tweet, Configuration $config = null) + { + if ($config === null) { + $config = $this->config; + } + + return Parser::create($config)->parseTweet($tweet); + } +} |