"HTMLText", ); function requireField() { DB::requireField($this->tableName, $this->name, "mediumtext character set utf8 collate utf8_general_ci"); } //useed for search results show only limited contents function LimitWordCount($numWords = 26) { $this->value = Convert::xml2raw($this->value); $ret = explode(" ", $this->value, $numWords); if( Count($ret) < $numWords-1 ){ $ret=$this->value; }else{ array_pop($ret); $ret=implode(" ", $ret)."..."; } return $ret; } function NoHTML() { return strip_tags($this->value); } function EscapeXML() { return str_replace(array('&','<','>','"'), array('&','<','>','"'), $this->value); } function Att() { return Convert::raw2att($this->value); } function AbsoluteLinks() { return HTTP::absoluteURLs($this->value); } function LimitCharacters($limit = 20, $add = "...") { $value = trim($this->value); return (strlen($value) > $limit) ? substr($value, 0, $limit) . $add : $value; } function LimitWordCountPlainText($numWords = 26) { $ret = $this->LimitWordCount( $numWords ); // Use LimitWordCountXML() instead! // return Convert::raw2xml($ret); return $ret; } function LimitWordCountXML( $numWords = 26 ) { $ret = $this->LimitWordCount( $numWords ); $ret = Convert::raw2xml($ret); return $ret; } function FirstSentence() { $data = Convert::xml2raw( $this->value ); $sentences = explode( '.', $data ); if( count( $sentences ) ) return $sentences[0] . '.'; else return $this->Summary(20); } function Summary($maxWords = 50) { // get first sentence? // this needs to be more robust $data = Convert::xml2raw( $this->value /*, true*/ ); if( !$data ) return ""; // grab the first paragraph, or, failing that, the whole content if( strpos( $data, "\n\n" ) ) $data = substr( $data, 0, strpos( $data, "\n\n" ) ); $sentences = explode( '.', $data ); $count = count( explode( ' ', $sentences[0] ) ); // if the first sentence is too long, show only the first $maxWords words if( $count > $maxWords ) { return implode( ' ', array_slice( explode( ' ', $sentences[0] ), 0, $maxWords ) ).'...'; } // add each sentence while there are enough words to do so $result = ''; do { $result .= trim(array_shift( $sentences )).'.'; if(count($sentences) > 0) { $count += count( explode( ' ', $sentences[0] ) ); } // Ensure that we don't trim half way through a tag or a link $brokenLink = (substr_count($result,'<') != substr_count($result,'>')) || (substr_count($result,']*>/', $result ) && !preg_match( '/<\/a>/', $result ) ) $result .= ''; $result = Convert::raw2xml( $result ); return $result; } /** * Performs the same function as the big summary, but doesnt trim new paragraphs off data. */ function BigSummary($maxWords = 50, $plain = 1) { // get first sentence? // this needs to be more robust if($plain) $data = Convert::xml2raw( $this->value, true ); if( !$data ) return ""; $sentences = explode( '.', $data ); $count = count( explode( ' ', $sentences[0] ) ); // if the first sentence is too long, show only the first $maxWords words if( $count > $maxWords ) { return implode( ' ', array_slice( explode( ' ', $sentences[0] ), 0, $maxWords ) ).'...'; } // add each sentence while there are enough words to do so do { $result .= trim(array_shift( $sentences )).'. ' ; $count += count( explode( ' ', $sentences[0] ) ); // Ensure that we don't trim half way through a tag or a link $brokenLink = (substr_count($result,'<') != substr_count($result,'>')) || (substr_count($result,']*>/', $result ) && !preg_match( '/<\/a>/', $result ) ) $result .= ''; return $result; } function FirstParagraph($plain = 1) { // get first sentence? // this needs to be more robust if($plain && $plain != 'html') { $data = Convert::xml2raw( $this->value, true ); if( !$data ) return ""; // grab the first paragraph, or, failing that, the whole content if( strpos( $data, "\n\n" ) ) $data = substr( $data, 0, strpos( $data, "\n\n" ) ); return $data; } else { if(strpos( $this->value, "

" ) === false) return $this->value; $data = substr( $this->value, 0, strpos( $this->value, "

" ) + 4 ); if(strlen($data) < 20 && strpos( $this->value, "

", strlen($data) )) $data = substr( $this->value, 0, strpos( $this->value, "

", strlen($data) ) + 4 ); return $data; } } /** * Allows a sub-class of TextParser to be rendered. @see TextParser for implementation details. */ function Parse($parser = "TextParser") { if($parser == "TextParser" || is_subclass_of($parser, "TextParser")) { $obj = new $parser($this->value); return $obj->parse(); } else { // Fallback to using raw2xml and show a warning // TODO Don't kill script execution, we can continue without losing complete control of the app user_error("Couldn't find an appropriate TextParser sub-class to create (Looked for '$parser'). Make sure it sub-classes TextParser and that you've done ?flush=1.", E_USER_WARNING); return Convert::raw2xml($this->value); } } } ?>