[pLog-svn] r3772 - in plog/trunk/class: dao data
Oscar Renalias
oscar at renalias.net
Sun Jul 23 15:24:41 GMT 2006
I think the code looks good to me.
Perhaps a test case or two wouldn't hurt, but I can take care of
them... this time only :-)
Oscar
On 22 Jul 2006, at 23:05, jondaley at devel.lifetype.net wrote:
> Author: jondaley
> Date: 2006-07-22 20:05:25 +0000 (Sat, 22 Jul 2006)
> New Revision: 3772
>
> Modified:
> plog/trunk/class/dao/article.class.php
> plog/trunk/class/data/textfilter.class.php
> Log:
> added slugify, a function to make better slugs than urlize can,
> since slugify uses the format match from linkparser to remove all
> characters that won't be recognized by the link parser.
>
> updated urlize (and slugify) to remove duplicate and trailing
> separator characters after doing the first replace.
>
> This makes a topic of "La la & bu bu"
> make a slug of "la-la-bu-bu" instead of"
> "la-la---bu-bu", I think it looks better.
>
> This change was bigger/harder than I expected it to be --
> what do you all think of it?
>
> Fixes: http://bugs.lifetype.net/view.php?id=901
>
>
>
> Modified: plog/trunk/class/dao/article.class.php
> ===================================================================
> --- plog/trunk/class/dao/article.class.php 2006-07-22 19:47:55 UTC
> (rev 3771)
> +++ plog/trunk/class/dao/article.class.php 2006-07-22 20:05:25 UTC
> (rev 3772)
> @@ -949,7 +949,7 @@
> {
> if( $this->_slug == "" ) {
> include_once( PLOG_CLASS_PATH.'class/data/
> textfilter.class.php' );
> - $slug = Textfilter::urlize( $this->getTopic());
> + $slug = Textfilter::slugify( $this->getTopic());
> } else {
> $slug = $this->_slug;
> }
> @@ -963,10 +963,10 @@
> * @param slug the new post slug
> */
> function setPostSlug( $slug )
> - {
> + {
> include_once( PLOG_CLASS_PATH.'class/data/
> textfilter.class.php' );
> - $this->_slug = Textfilter::urlize( $slug );
> - }
> + $this->_slug = Textfilter::slugify( $slug );
> + }
>
> /**
> * returns the previous article in time
>
> Modified: plog/trunk/class/data/textfilter.class.php
> ===================================================================
> --- plog/trunk/class/data/textfilter.class.php 2006-07-22 19:47:55
> UTC (rev 3771)
> +++ plog/trunk/class/data/textfilter.class.php 2006-07-22 20:05:25
> UTC (rev 3772)
> @@ -8,7 +8,6 @@
> */
>
>
> - include_once( PLOG_CLASS_PATH."class/config/config.class.php" );
> include_once( PLOG_CLASS_PATH."class/data/stringutils.class.php" );
>
> /**
> @@ -38,10 +37,9 @@
> */
> function TextFilter( $removeJavaScript = true )
> {
> -
> -
> $this->removeJavaScript = $removeJavaScript;
>
> + include_once( PLOG_CLASS_PATH."class/config/
> config.class.php" );
> $config =& Config::getConfig();
> $this->htmlAllowedTags = $config->getValue
> ( "html_allowed_tags_in_comments" );
> $this->_smileys = $config->getValue( "smileys" );
> @@ -405,15 +403,24 @@
> $string = str_replace(array
> (';','/','?',':','@','&','=','+','$',','), '', $string);
>
> // replace some characters to similar ones
> - $search = array(' ', 'ä', 'ö', 'ü','é','è','à','ç',
> 'à', 'è', 'ì', 'ò', 'ù', 'á', 'é', 'í', 'ó', 'ú', 'ë', 'ï' );
> - include_once( PLOG_CLASS_PATH."class/config/config.class.php" );
> + $search = array(' ', 'ä', 'ö', 'ü','é','è','à','ç',
> 'à', 'è', 'ì',
> + 'ò', 'ù', 'á', 'é', 'í', 'ó', 'ú',
> 'ë', 'ï' );
> + include_once( PLOG_CLASS_PATH."class/config/
> config.class.php" );
> $config =& Config::getConfig();
> - $replace = array( $config->getValue
> ( "urlize_word_separator", URLIZE_WORD_SEPARATOR_DEFAULT ),
> 'a','o','u','e','e','a','c', 'a', 'e', 'i', 'o', 'u', 'a', 'e',
> 'i', 'o', 'u', 'e', 'i' );
> + $separator = $config->getValue
> ( "urlize_word_separator", URLIZE_WORD_SEPARATOR_DEFAULT );
> +
> + $replace = array( $separator ,
> 'a','o','u','e','e','a','c', 'a', 'e', 'i',
> + 'o', 'u', 'a', 'e', 'i', 'o', 'u',
> 'e', 'i' );
> $string = str_replace($search, $replace, $string);
>
> // and everything that is still left that hasn't been
> replaced/encoded, throw it away
> $string = preg_replace( '/[^a-z0-9 _.-]/', '', $string );
>
> + // remove doubled separators
> + $string = preg_replace("/[".$separator."]+/",
> $separator, $string);
> + // remove starting and trailing separator chars
> + $string = trim($string, $separator);
> +
> return $string;
> }
>
> @@ -448,6 +455,8 @@
> $string = str_replace(array
> (';','/','?',':','@','&','=','+','$',','), '', $string);
>
> // replace some characters to similar ones
> + // underscores aren't allowed in domain names
> according to rfc specs, and
> + // cause trouble in some browsers, particularly with
> cookies.
> $search = array('_','
> ','ä','ö','ü','é','è','à','ç','à','è','ì','ò','ù','á','é','í','ó','ú',
> 'ë','ï');
> $replace = array
> ('-','-','a','o','u','e','e','a','c','a','e','i','o','u','a','e','i','
> o','u','e','i');
> $string = str_replace($search, $replace, $string);
> @@ -471,22 +480,65 @@
> function xhtmlize( $string )
> {
> // use kses in the "xhtml converter" mode
> - $config =& Config::getConfig();
> - if( $config->getValue( "xhtml_converter_enabled" )) {
> + include_once( PLOG_CLASS_PATH."class/config/
> config.class.php" );
> + $config =& Config::getConfig();
> + if( $config->getValue( "xhtml_converter_enabled" )) {
> include_once( PLOG_CLASS_PATH."class/data/
> kses.class.php" );
> - $kses = new kses( true, $config->getValue
> ( "xhtml_converter_aggresive_mode_enabled"));
> - $result = $kses->Parse( $string );
> -
> - // if balanceTags wasn't broken, we could use it...
> - //$result = Textfilter::balanceTags( $result );
> - }
> - else
> - $result = $string;
> -
> - return $result;
> + $kses = new kses( true, $config->getValue
> ( "xhtml_converter_aggresive_mode_enabled"));
> + $result = $kses->Parse( $string );
> +
> + // if balanceTags wasn't broken, we could use
> it...
> + //$result = Textfilter::balanceTags( $result );
> + }
> + else
> + $result = $string;
> +
> + return $result;
> }
> -
> +
> +
> /**
> + * slugifies a string, which is to say that it urlizes it but
> + * additionally only uses characters allowed in a
> postname, as
> + * defined by the linkparser.
> + *
> + * @param string
> + * @return the xhtml-ized string
> + */
> + function slugify( $string ){
> + include_once( PLOG_CLASS_PATH."class/config/
> config.class.php" );
> + include_once( PLOG_CLASS_PATH.'class/net/
> linkparser.class.php' );
> +
> + $config =& Config::getConfig();
> + $separator = $config->getValue
> ( "urlize_word_separator", URLIZE_WORD_SEPARATOR_DEFAULT );
> + // remove characters not allowed by the link parser
> + $lp = new LinkParser("");
> + $regexp = $lp->getValidTag("{postname}");
> + $start_bracket = strpos($regexp, "[");
> + $end_bracket = strrpos($regexp, "]");
> + $validChars = false;
> + if($start_bracket !== false && $end_bracket !== false){
> + $validChars = substr($regexp, $start_bracket+1,
> + $end_bracket-$start_bracket-1);
> + }
> + // link format doesn't contain brackets, or is not
> what we
> + // were expecting using default
> + if($validChars === false){
> + $validChars = "_0-9a-zA-Z.-";
> + }
> + // remove "bad" characters
> + $string = preg_replace("/[^".$validChars."]/",
> $separator, Textfilter::htmlDecode($string));
> + // remove doubled separators
> + $string = preg_replace("/[".$separator."]+/",
> $separator, $string);
> + // remove starting and trailing separator chars
> + $string = trim($string, $separator);
> +
> + return $string;
> + }
> +
> +
> +
> + /**
> * @private
> */
> function checkboxToBoolean( $value )
>
> _______________________________________________
> pLog-svn mailing list
> pLog-svn at devel.lifetype.net
> http://devel.lifetype.net/mailman/listinfo/plog-svn
>
More information about the pLog-svn
mailing list