function smd_switch($atts, $thing) { global $smd_switch_item, $smd_switch_debug; extract(lAtts(array( 'item' => '', 'look_in' => 'SMD_ALL', 'leave_empty' => '1', 'debug' => '0', ), $atts)); $smd_switch_item = smd_mc_parse($item, $look_in, $leave_empty); $smd_switch_debug = $debug; 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; 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_switch}'] = $replacements['{smd_mc_item}'] = $tester; if ($tester != '') { if ($debug || $smd_switch_debug) { echo "++ TEST $tester " . (($default) ? 'DEFAULT' : $type.' '.$value); } if ($default == 1 && !$smd_case_true) { $result = true; } else { switch ($type) { 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; default: // Equality $result = ($numeric) ? (($tester === $value) ? true : false) : (($tester == $value) ? true : false); break; } } $smd_case_true = ($result) ? true : $smd_case_true; if ($debug || $smd_switch_debug) { echo ' RESULT: ' . (($result) ? 'TRUE' : 'FALSE' ) . '
'; } if ($result && !$fallthru) { $smd_switch_item = ''; } if ($thing) { $ret = $result || $smd_multi_case; $replacements['{smd_case}'] = $replacements['{smd_mc_value}'] = ($result) ? $value : $smd_mc_val; $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; }