JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
fix enc_ functions for image/thumb parts
[wfpl.git] / encode.php
index 4ef72ae..f5a5622 100644 (file)
@@ -28,10 +28,18 @@ function enc_cap($str) {
        return $str;
 }
 
+# quote for placing between single quotes in php
+function enc_phpsq($str) {
+       $str = str_replace("\\", "\\\\", $str);
+       $str = str_replace("'", "\\'", $str);
+       return $str;
+}
+
 function enc_jsdq($str) {
        $str = enc_sql($str);
        $str = str_replace("\n", "\\n", $str);
-       return str_replace("\r", "\\r", $str);
+       $str = str_replace("\r", "\\r", $str);
+       return $str;
 }
 
 # encode for putting within double-quotes in SQL
@@ -61,13 +69,13 @@ function enc_htmlbr($str) {
 }
 
 # Encode for output in html. Preserves newlines and indentation by converting
-# newlines to <br> and spaces at the begining of lines to &nbsp;&nbsp;
+# newlines to <br> and spaces/tabs at the begining of lines to &nbsp;s
 #
 # Example: <p>~foo htmlbrtab~</p>
 function enc_htmlbrtab($str) {
        $str = enc_htmlbr($str);
-       $space_to_nbsp = create_function('$matches', 'return str_repeat(\'&nbsp;\', strlen($matches[0]) * 2);');
-       $str = preg_replace_callback("|^ *|m", $space_to_nbsp, $str);
+       $whitespace_to_nbsp = create_function('$matches', '$count = 0; $chars = str_split($matches[0]); foreach ($chars as $c) { if ($c == " ") { $count += 2; } else if ($c == "\t") { $count += 8; } } return str_repeat("&nbsp;", $count);');
+       $str = preg_replace_callback("|^[ \t]+|m", $whitespace_to_nbsp, $str);
        return $str;
 }
 
@@ -146,9 +154,16 @@ function enc_tab($str) {
        return "\t" . implode("\n\t", explode("\n", $str));
 }
 
-function enc_upper($str) {
+function enc_uppercase($str) {
        return strtoupper($str);
 }
+function enc_upper($str) { # depricated
+       return enc_uppercase($str);
+}
+
+function enc_lowercase($str) {
+       return strtolower($str);
+}
 
 # pass date in the form 2008-05-23
 # ercodes date as 05/23/2008
@@ -167,11 +182,16 @@ function enc_mdy($str) {
        return enc_mmddyyyy($str);
 }
 
-function enc_mmddyyyyhhmm($seconds) {
-       return date('m/d/Y g:ia', (int)$seconds);
+# pass unix timestamp or "2012-12-20 22:23:34"
+function enc_mmddyyyyhhmm($str) {
+       if(is_numeric($str)) {
+               return date('m/d/Y g:ia', (int)$str);
+       } else {
+               return enc_mmddyyyy(substr($str, 0, 10)) . substr($str, 10, 6);
+       }
 }
 
-# takes decimal
+# takes decimal number of hours
 # returns hh:mm
 function enc_hhmm($str) {
        if(strlen($str) == 0) {
@@ -183,7 +203,7 @@ function enc_hhmm($str) {
        return $str;
 }
 
-# takes decimal
+# takes decimal number of hours
 # returns hh:mm followed by "am" or "pm" with no space
 function enc_12hr($str) {
        if(strlen($str) == 0) {
@@ -248,12 +268,12 @@ function pulldown($name, $in_options, $multiple = false) {
 # output a bunch of <option> tags
 function enc_options($values, $name) {
        if(!isset($GLOBALS[$name . '_options'])) {
-               die("pulldown('$name') must be called before this template can be run. See code/wfpl/encode.php");
+               die("pulldown('$name') must be called before this template can be run. See wfpl/encode.php");
        }
        if($GLOBALS[$name . '_options']['multiple']) { # FIXME test this
                $values = explode(', ', $values);
        }
-       return encode_options($values, $GLOBALS[$name . '_options']['options'], PULLDOWN_2D);
+       return encode_options($values, $GLOBALS[$name . '_options']['options']);
 }
 
 # for radios and pulldowns:
@@ -261,7 +281,7 @@ function enc_options($values, $name) {
 # returns what the user sees in the pulldown or on the radio button caption
 function enc_pulled($str, $name) {
        if(!isset($GLOBALS[$name . '_options'])) {
-               die("pulldown('$name') must be called before this template can be run. See code/wfpl/encode.php");
+               die("pulldown('$name') must be called before this template can be run. See wfpl/encode.php");
        }
        foreach($GLOBALS[$name . '_options']['options'] as &$kv) {
                if($kv[0] == $str) {
@@ -273,7 +293,7 @@ function enc_pulled($str, $name) {
 
 function enc_radio_n($str, $name, $n) {
        if(!isset($GLOBALS[$name . '_options'])) {
-               die("pulldown('$name') must be called before this template can be run. See code/wfpl/encode.php");
+               die("pulldown('$name') must be called before this template can be run. See wfpl/encode.php");
        }
 
        if(!isset($GLOBALS[$name . '_options']['options'][$n])) {
@@ -296,11 +316,24 @@ function enc_radio_4($str, $name) { return enc_radio_n($str, $name, 4); }
 function enc_radio_5($str, $name) { return enc_radio_n($str, $name, 5); }
 function enc_radio_6($str, $name) { return enc_radio_n($str, $name, 6); }
 function enc_radio_7($str, $name) { return enc_radio_n($str, $name, 7); }
+function enc_radio_8($str, $name) { return enc_radio_n($str, $name, 8); }
+function enc_radio_9($str, $name) { return enc_radio_n($str, $name, 9); }
+function enc_radio_10($str, $name) { return enc_radio_n($str, $name, 10); }
+function enc_radio_11($str, $name) { return enc_radio_n($str, $name, 11); }
+function enc_radio_12($str, $name) { return enc_radio_n($str, $name, 12); }
+function enc_radio_13($str, $name) { return enc_radio_n($str, $name, 13); }
+function enc_radio_14($str, $name) { return enc_radio_n($str, $name, 14); }
+function enc_radio_15($str, $name) { return enc_radio_n($str, $name, 15); }
+function enc_radio_16($str, $name) { return enc_radio_n($str, $name, 16); }
+function enc_radio_17($str, $name) { return enc_radio_n($str, $name, 17); }
+function enc_radio_18($str, $name) { return enc_radio_n($str, $name, 18); }
+function enc_radio_19($str, $name) { return enc_radio_n($str, $name, 19); }
+function enc_radio_20($str, $name) { return enc_radio_n($str, $name, 20); }
 
 
 function enc_radio_caption_n($str, $name, $n) {
        if(!isset($GLOBALS[$name . '_options'])) {
-               die("pulldown('$name') must be called before this template can be run. See code/wfpl/encode.php");
+               die("pulldown('$name') must be called before this template can be run. See wfpl/encode.php");
        }
 
        if(!isset($GLOBALS[$name . '_options']['options'][$n])) {
@@ -317,6 +350,19 @@ function enc_radio_caption_4($str, $name) { return enc_radio_caption_n($str, $na
 function enc_radio_caption_5($str, $name) { return enc_radio_caption_n($str, $name, 5); }
 function enc_radio_caption_6($str, $name) { return enc_radio_caption_n($str, $name, 6); }
 function enc_radio_caption_7($str, $name) { return enc_radio_caption_n($str, $name, 7); }
+function enc_radio_caption_8($str, $name) { return enc_radio_caption_n($str, $name, 8); }
+function enc_radio_caption_9($str, $name) { return enc_radio_caption_n($str, $name, 9); }
+function enc_radio_caption_10($str, $name) { return enc_radio_caption_n($str, $name, 10); }
+function enc_radio_caption_11($str, $name) { return enc_radio_caption_n($str, $name, 11); }
+function enc_radio_caption_12($str, $name) { return enc_radio_caption_n($str, $name, 12); }
+function enc_radio_caption_13($str, $name) { return enc_radio_caption_n($str, $name, 13); }
+function enc_radio_caption_14($str, $name) { return enc_radio_caption_n($str, $name, 14); }
+function enc_radio_caption_15($str, $name) { return enc_radio_caption_n($str, $name, 15); }
+function enc_radio_caption_16($str, $name) { return enc_radio_caption_n($str, $name, 16); }
+function enc_radio_caption_17($str, $name) { return enc_radio_caption_n($str, $name, 17); }
+function enc_radio_caption_18($str, $name) { return enc_radio_caption_n($str, $name, 18); }
+function enc_radio_caption_19($str, $name) { return enc_radio_caption_n($str, $name, 19); }
+function enc_radio_caption_20($str, $name) { return enc_radio_caption_n($str, $name, 20); }
 
 
 # use this function along with a special template to generate the html for pulldowns and multiple select boxes.
@@ -325,22 +371,18 @@ function enc_radio_caption_7($str, $name) { return enc_radio_caption_n($str, $na
 #
 #    selected: can be a string or (for multiple-selects) an array
 #
-#    options, keys_from: see documentation for pulldown() above
-function encode_options($selected, $options, $keys_from) {
+#    options: see documentation for pulldown() above
+function encode_options($selected, $options) {
        if(!is_array($selected)) {
                $selected = array($selected);
        }
 
-       if($keys_from != PULLDOWN_2D) {
-               $options = pulldown_options_to_2d($options, $keys_from);
-       }
-
        $out = '';
        foreach($options as $option) {
-               list($value, $display, $arg3) = $option;
+               list($value, $display) = $option;
                $out .= '<option';
 
-               if($arg3 == 'disabled') {
+               if(isset($option[2]) && $option[2] == 'disabled') {
                        $out .= ' disabled';
                } elseif(in_array($value, $selected)) {
                        $out .= ' selected';
@@ -362,22 +404,22 @@ function encode_options($selected, $options, $keys_from) {
        return $out;
 }
 
-$GLOBALS['wfpl_states_assoc'] = array("AL" => "Alabama", "AK" => "Alaska", "AZ" => "Arizona", "AR" => "Arkansas", "CA" => "California", "CO" => "Colorado", "CT" => "Connecticut", "DE" => "Delaware", "FL" => "Florida", "GA" => "Georgia", "HI" => "Hawaii", "ID" => "Idaho", "IL" => "Illinois", "IN" => "Indiana", "IA" => "Iowa", "KS" => "Kansas", "KY" => "Kentucky", "LA" => "Louisiana", "ME" => "Maine", "MD" => "Maryland", "MA" => "Massachusetts", "MI" => "Michigan", "MN" => "Minnesota", "MS" => "Mississippi", "MO" => "Missouri", "MT" => "Montana", "NE" => "Nebraska", "NV" => "Nevada", "NH" => "New Hampshire", "NJ" => "New Jersey", "NM" => "New Mexico", "NY" => "New York", "NC" => "North Carolina", "ND" => "North Dakota", "OH" => "Ohio", "OK" => "Oklahoma", "OR" => "Oregon", "PA" => "Pennsylvania", "RI" => "Rhode Island", "SC" => "South Carolina", "SD" => "South Dakota", "TN" => "Tennessee", "TX" => "Texas", "UT" => "Utah", "VT" => "Vermont", "VA" => "Virginia", "WA" => "Washington", "DC" => "Washington, DC", "WV" => "West Virginia", "WI" => "Wisconsin", "WY" => "Wyoming");
+$GLOBALS['wfpl_states_assoc'] = array(array("AL", "Alabama"), array("AK", "Alaska"), array("AZ", "Arizona"), array("AR", "Arkansas"), array("CA", "California"), array("CO", "Colorado"), array("CT", "Connecticut"), array("DE", "Delaware"), array("FL", "Florida"), array("GA", "Georgia"), array("HI", "Hawaii"), array("ID", "Idaho"), array("IL", "Illinois"), array("IN", "Indiana"), array("IA", "Iowa"), array("KS", "Kansas"), array("KY", "Kentucky"), array("LA", "Louisiana"), array("ME", "Maine"), array("MD", "Maryland"), array("MA", "Massachusetts"), array("MI", "Michigan"), array("MN", "Minnesota"), array("MS", "Mississippi"), array("MO", "Missouri"), array("MT", "Montana"), array("NE", "Nebraska"), array("NV", "Nevada"), array("NH", "New Hampshire"), array("NJ", "New Jersey"), array("NM", "New Mexico"), array("NY", "New York"), array("NC", "North Carolina"), array("ND", "North Dakota"), array("OH", "Ohio"), array("OK", "Oklahoma"), array("OR", "Oregon"), array("PA", "Pennsylvania"), array("RI", "Rhode Island"), array("SC", "South Carolina"), array("SD", "South Dakota"), array("TN", "Tennessee"), array("TX", "Texas"), array("UT", "Utah"), array("VT", "Vermont"), array("VA", "Virginia"), array("WA", "Washington"), array("DC", "Washington, DC"), array("WV", "West Virginia"), array("WI", "Wisconsin"), array("WY", "Wyoming"));
 
 # display <option>s
 function enc_states($str) {
        $ret = '';
 
-       return encode_options($str, $GLOBALS['wfpl_states_assoc'], PULLDOWN_HASH);
+       return encode_options($str, $GLOBALS['wfpl_states_assoc']);
 }
 
-$GLOBALS['wfpl_provinces_assoc'] = array("AB" => "Alberta", "BC" => "British Columbia", "MB" => "Manitoba", "NF" => "Newfoundland", "NB" => "New Brunswick", "NS" => "Nova Scotia", "NT" => "Northwest Territories", "NU" => "Nunavut", "ON" => "Ontario", "PE" => "Prince Edward Island", "QC" => "Quebec", "SK" => "Saskatchewan", "YT" => "Yukon Territory");
+$GLOBALS['wfpl_provinces_assoc'] = array(array("AB", "Alberta"), array("BC", "British Columbia"), array("MB", "Manitoba"), array("NF", "Newfoundland"), array("NB", "New Brunswick"), array("NS", "Nova Scotia"), array("NT", "Northwest Territories"), array("NU", "Nunavut"), array("ON", "Ontario"), array("PE", "Prince Edward Island"), array("QC", "Quebec"), array("SK", "Saskatchewan"), array("YT", "Yukon Territory"));
 
 # display <option>s
 function enc_provinces($str) {
        $ret = '';
 
-       return encode_options($str, $GLOBALS['wfpl_provinces_assoc'], PULLDOWN_HASH);
+       return encode_options($str, $GLOBALS['wfpl_provinces_assoc']);
 }
 
 # returns "odd", then "even", then "odd" etc.
@@ -395,34 +437,19 @@ function enc_evenodd($values, $name) {
        }
 }
 
-function enc_image_src($str) {
-       list($src, $width, $height, $a, $b, $c) = explode(' ', $str);
-       return $src;
-}
-
-function enc_image_width($str) {
-       list($src, $width, $height, $a, $b, $c) = explode(' ', $str);
-       return $width;
-}
-
-function enc_image_height($str) {
-       list($src, $width, $height, $a, $b, $c) = explode(' ', $str);
-       return $height;
-}
-
-function enc_thumb_src($str) {
-       list($a, $b, $c, $src, $width, $height) = explode(' ', $str);
-       return $src;
+function wfpl_nth_word($str, $n) {
+       $a = explode(' ', $str);
+       return isset($a[$n]) ? $a[$n] : null;
 }
 
-function enc_thumb_width($str) {
-       list($a, $b, $c, $src, $width, $height) = explode(' ', $str);
-       return $width;
-}
-function enc_thumb_height($str) {
-       list($a, $b, $c, $src, $width, $height) = explode(' ', $str);
-       return $height;
-}
+# encoding is a space separated list of:
+# image_filename width height thumb_filename thumb_width thumb_height
+function enc_image_src($str) { return wfpl_nth_word($str, 0); }
+function enc_image_width($str) { return wfpl_nth_word($str, 1); }
+function enc_image_height($str) { return wfpl_nth_word($str, 2); }
+function enc_thumb_src($str) { return wfpl_nth_word($str, 3); }
+function enc_thumb_width($str) { return wfpl_nth_word($str, 4); }
+function enc_thumb_height($str) { return wfpl_nth_word($str, 5); }
 
 # example template: Length: ~length html~ day~length s~
 function enc_s($str) {
@@ -432,3 +459,30 @@ function enc_s($str) {
 
        return 's';
 }
+
+# turn http/ftp (s) urls into html links (and encode everything for html)
+# does not encode without protocol (eg "www.foo.com")
+# does not linkify email addresses
+function enc_linkify($str) {
+       $ret = '';
+       $even = true;
+       $pieces = preg_split("/((?:ht|f)tps?:\/\/[^ \,\"\n\r\t<]+)/is", $str, null, PREG_SPLIT_DELIM_CAPTURE);
+       foreach($pieces as $piece) {
+               if($even) {
+                       $ret .= enc_html($piece);
+               } else {
+                       $ret .= '<a href="' . enc_attr($piece) . '">' . enc_html($piece) . '</a>';
+               }
+               $even = !$even;
+       }
+       return $ret;
+}
+
+# turns a filename into the unix timestamp of that files modification date
+function enc_mtime($dummy, $filename) {
+       $stat = stat($filename);
+       if ($stat === false) {
+               return '';
+       }
+       return '' . $stat['mtime'];
+}