function smd_switch($atts, $thing) { global $smd_switch_item, $smd_switch_debug, $smd_case_true, $smd_multi_case, $smd_mc_val, $smd_bypass, $smd_var_prefix; extract(lAtts(array( 'item' => '', 'look_in' => 'SMD_ALL', 'leave_empty' => '1', 'debug' => '0', 'var_prefix' => 'smd_', ), $atts)); if (!isset($atts['item'])) { trigger_error("smd_multi_choice requires an item to look at"); return; } $smd_switch_item = smd_mc_parse($item, $look_in, $leave_empty); // Initialize everything else in case previous smd_switch tags left any global residue $smd_var_prefix = $var_prefix; $smd_switch_debug = $debug; $smd_bypass = $smd_case_true = 0; $smd_multi_case = false; $smd_mc_val = ''; return (parse($thing)); } function smd_case($atts, $thing=NULL) { global $smd_switch_item, $smd_switch_debug, $smd_case_true, $smd_multi_case, $smd_mc_val, $smd_bypass, $smd_var_prefix; extract(lAtts(array( 'value' => '', 'look_in' => 'SMD_ALL', 'leave_empty' => '1', 'type' => 'eq', 'case_sensitive' => 0, 'numeric' => 0, 'fallthru' => 0, 'default' => 0, 'debug' => 0, ), $atts)); $result = false; // Validation $cases = array('islower', 'isupper'); $case_sensitive = (in_array($type, $cases)) ? 1 : $case_sensitive; $value = smd_mc_parse($value, $look_in, $leave_empty); $value = ($case_sensitive) ? $value : strtolower($value); $tester = ($case_sensitive) ? $smd_switch_item : strtolower($smd_switch_item); $fallthru = (!$thing) ? 1 : $fallthru; $replacements = array(); $replacements['{'.$smd_var_prefix.'switch}'] = $replacements['{'.$smd_var_prefix.'mc_item}'] = $tester; if ($smd_bypass == 0) { if ($debug || $smd_switch_debug) { echo "++ TEST $tester " . (($default) ? 'DEFAULT' : $type.' '.$value); } if ($default == 1 && !$smd_case_true) { $result = true; } else { switch ($type) { case 'eq': $result = ($numeric) ? (($tester === $value) ? true : false) : (($tester == $value) ? true : false); break; case 'gt': $result = ($numeric) ? ((ctype_digit((string)$tester) && ctype_digit((string)$value) && (int)$tester > (int)$value) ? true : false) : (($tester > $value) ? true : false); break; case 'ge': $result = ($numeric) ? ((ctype_digit((string)$tester) && ctype_digit((string)$value) && (int)$tester >= (int)$value) ? true : false) : (($tester >= $value) ? true : false); break; case 'lt': $result = ($numeric) ? ((ctype_digit((string)$tester) && ctype_digit((string)$value) && (int)$tester < (int)$value) ? true : false) : (($tester < $value) ? true : false); break; case 'le': $result = ($numeric) ? ((ctype_digit((string)$tester) && ctype_digit((string)$value) && (int)$tester <= (int)$value) ? true : false) : (($tester <= $value) ? true : false); break; case 'divisible': $result = (ctype_digit((string)$tester) && ctype_digit((string)$value) && (int)$tester > 0 && (int)$tester % (int)$value === 0) ? true : false; break; case 'begins': $result = (strpos($tester, $value) === 0) ? true : false; break; case 'contains': $result = (strpos($tester, $value) !== false) ? true : false; break; case 'ends': $result = (substr($tester, strlen($tester) - strlen($value)) === $value) ? true : false; break; case 'isnum': $result = (ctype_digit((string)$tester)) ? true : false; break; case 'isalpha': $result = (ctype_alpha((string)$tester)) ? true : false; break; case 'isalnum': $result = (ctype_alnum((string)$tester)) ? true : false; break; case 'islower': $result = (ctype_lower((string)$tester)) ? true : false; break; case 'isupper': $result = (ctype_upper((string)$tester)) ? true : false; break; case 'ispunct': $result = (ctype_punct((string)$tester)) ? true : false; break; case 'isspace': $result = (ctype_space((string)$tester)) ? true : false; break; case 'empty': $result = ($tester == '') ? true : false; break; } } $smd_case_true = ($result) ? true : $smd_case_true; if ($debug || $smd_switch_debug) { echo ' RESULT: ' . (($result) ? 'TRUE' : 'FALSE' ) . '
'; } if (($result || $smd_multi_case) && !$fallthru) { $smd_bypass = 1; } if ($thing) { $ret = $result || $smd_multi_case; $replacements['{'.$smd_var_prefix.'case}'] = $replacements['{'.$smd_var_prefix.'mc_value}'] = ($result) ? $value : $smd_mc_val; if ($debug > 1 || $smd_switch_debug > 1) { echo '++ REPLACEMENTS ++'; dmp($replacements); } $smd_multi_case = false; return parse(EvalElse(strtr($thing, $replacements), $ret)); } else { $smd_multi_case = ($result) ? true : $smd_multi_case; $smd_mc_val = ($result) ? $value : $smd_mc_val; } } else { return false; } } // Look in the given $in places for a value from a '?' variable $item function smd_mc_parse($item, $in, $mt='1') { global $pretext, $thisarticle, $thisimage, $thisfile, $thislink, $variable; $in = ($in == "SMD_ALL") ? "txpvar, svrvar, image, file, link, gbl, article, urlvar, phpvar" : $in; $lookin = do_list($in); $modRE = '/(\?)([A-Za-z0-9_\- ]+)/'; $numMods = preg_match_all($modRE, $item, $mods); for ($modCtr = 0; $modCtr < $numMods; $modCtr++) { $modChar = $mods[1][$modCtr]; $modItem = trim($mods[2][$modCtr]); $lowitem = strtolower($modItem); if (in_array("txpvar", $lookin) && isset($variable[$lowitem])) { $item = str_replace($modChar.$modItem, $variable[$lowitem], $item); } else if (in_array("svrvar", $lookin) && serverSet($modItem) != '') { $item = str_replace($modChar.$modItem, doSlash(serverSet($modItem)), $item); } else if (in_array("image", $lookin) && isset($thisimage[$lowitem]) && !empty($thisimage[$lowitem])) { $item = str_replace($modChar.$modItem, $thisimage[$lowitem], $item); } else if (in_array("file", $lookin) && isset($thisfile[$lowitem]) && !empty($thisfile[$lowitem])) { $item = str_replace($modChar.$modItem, $thisfile[$lowitem], $item); } else if (in_array("link", $lookin) && isset($thislink[$lowitem]) && !empty($thislink[$lowitem])) { $item = str_replace($modChar.$modItem, $thislink[$lowitem], $item); } else if (in_array("gbl", $lookin) && array_key_exists($lowitem, $pretext) && !empty($pretext[$lowitem])) { $item = str_replace($modChar.$modItem, $pretext[$lowitem], $item); } else if (in_array("article", $lookin) && isset($thisarticle[$lowitem]) && !empty($thisarticle[$lowitem])) { $item = str_replace($modChar.$modItem, $thisarticle[$lowitem], $item); } else if (in_array("urlvar", $lookin) && gps($lowitem) != '') { $item = str_replace($modChar.$modItem, doSlash(gps($lowitem)), $item); } else if (in_array("phpvar", $lookin) && isset($GLOBALS[$lowitem]) && !empty($GLOBALS[$lowitem])) { $item = str_replace($modChar.$modItem, $GLOBALS[$lowitem], $item); } else if (!$mt) { $item = str_replace($modChar.$modItem, $modItem, $item); } else { $item = ''; } } return $item; }