[pLog-svn] r3772 - in plog/trunk/class: dao data
Jon Daley
plogworld at jon.limedaley.com
Mon Jul 24 01:36:49 GMT 2006
Oh right. I forgot. I haven't looked into how I am supposed to
make and use the test cases.
On Sun, 23 Jul 2006, Oscar Renalias wrote:
> 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
>>
>
> _______________________________________________
> pLog-svn mailing list
> pLog-svn at devel.lifetype.net
> http://devel.lifetype.net/mailman/listinfo/plog-svn
--
Jon Daley
http://jon.limedaley.com/
If you do a job too well, you will get stuck with it.
-- Slous
More information about the pLog-svn
mailing list