, Jam Warehouse (Pty) Ltd, South Africa */ class KTUtil { function extractGPC () { foreach (func_get_args() as $var) { if (array_key_exists($var, $_REQUEST)) { $GLOBALS["$var"] = $_REQUEST["$var"]; } } } function strToBool ($sString, $null = false, $empty = false) { $sString = strtoupper($sString); if ($sString == "Y") { return true; } elseif (($sString == "N")) { return false; } elseif (($sString == "ON")) { return true; } elseif (($sString == "OFF")) { return false; } elseif (($sString == "")) { return $empty; } else { return $null; } } function intToBool ($sString) { $iInt = (int)$sString; return $iInt !== 0; } function anyToBool ($sString, $null = false) { if (is_bool($sString)) { return $sString; } if (is_numeric($sString)) { return KTUtil::intToBool($sString); } if (is_string($sString)) { if (KTUtil::strToBool($sString) === true) { return true; } } if (is_null($sString)) { return $null; } return false; } function randomString($length=16, $sRandom="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"){ $sString = ""; $iCurLen = 0; $iRandomLen = strlen($sRandom); while ($length > $iCurLen) { $sString .= substr($sRandom, mt_rand(0, $iRandomLen -1), 1); $iCurLen++; } return $sString; } function arrayGet($aArray, $sKey, $mDefault = null, $bDefaultIfEmpty = true) { if (empty($aArray)) { return $mDefault; } if (array_key_exists($sKey, $aArray)) { $mVal = $aArray[$sKey]; if (empty($mVal) && $bDefaultIfEmpty) { return $mDefault; } return $mVal; } return $mDefault; } function requestValue($sKey, $mDefault = null) { return KTUtil::arrayGet($_REQUEST, $sKey, $mDefault); } // {{{ whereToString /** * Convert an array of parameterised strings to a single * parameterised string. * * Return null in case of an empty array. */ function whereToString($aWhere) { $aStrings = array(); $aParams = array(); foreach ($aWhere as $oSomething) { if (is_string($oSomething)) { $aStrings[] = $oSomething; } else if (is_array($oSomething)) { $aStrings[] = $oSomething[0]; $aNewParams = array(); foreach ($oSomething[1] as $oParam) { if (is_array($oParam)) { $aNewParams = array_merge($aNewParams, $oParam); } else { $aNewParams[] = $oParam; } } $aParams = array_merge($aParams, $aNewParams); } else { return PEAR::raiseError("Weird WhereClause passed"); } } if (count($aStrings) === 0) { return null; } return array(join(" AND ", $aStrings), $aParams); } // }}} // {{{ safeShellString function safeShellString () { $aArgs = func_get_args(); $aSafeArgs = array(); if (is_array($aArgs[0])) { $aArgs = $aArgs[0]; } $aSafeArgs[] = escapeshellarg(array_shift($aArgs)); if (is_array($aArgs[0])) { $aArgs = $aArgs; } foreach ($aArgs as $sArg) { if (empty($sArg)) { $aSafeArgs[] = "''"; } else { $aSafeArgs[] = escapeshellarg($sArg); } } return join(" ", $aSafeArgs); } // }}} // {{{ copyDirectory function copyDirectory($sSrc, $sDst, $bMove = false) { if (file_exists($sDst)) { return PEAR::raiseError("Destination directory already exists."); } if (OS_UNIX) { if ($bMove && file_exists('/bin/mv')) { system(KTUtil::safeShellString(array('/bin/mv', $sSrc, $sDst))); return; } if (!$bMove && file_exists('/bin/cp')) { system(KTUtil::safeShellString(array('/bin/cp', '-R', $sSrc, $sDst))); return; } } if (substr($sDst, 0, strlen($sSrc)) === $sSrc) { return PEAR::raiseError("Destination of move is within source"); } $hSrc = @opendir($sSrc); if ($hSrc === false) { return PEAR::raiseError("Could not open source directory: $sSrc"); } if (@mkdir($sDst, 0777) === false) { return PEAR::raiseError("Could not create destination directory: $sDst"); } while (($sFilename = readdir($hSrc)) !== false) { if (in_array($sFilename, array('.', '..'))) { continue; } $sOldFile = sprintf("%s/%s", $sSrc, $sFilename); $sNewFile = sprintf("%s/%s", $sDst, $sFilename); if (is_dir($sOldFile)) { KTUtil::copyDirectory($sOldFile, $sNewFile, $bMove); continue; } if ($bMove) { KTUtil::moveFile($sOldFile, $sNewFile); } else { copy($sOldFile, $sNewFile); } } if ($bMove) { rmdir($sSrc); } } // }}} // {{{ moveDirectory function moveDirectory($sSrc, $sDst) { return KTUtil::copyDirectory($sSrc, $sDst, true); } // }}} // {{{ moveFile function moveFile ($sSrc, $sDst) { // Only 4.3.3 and above allow us to use rename across partitions // on Unix-like systems. if (OS_UNIX) { // If /bin/mv exists, just use it. if (file_exists('/bin/mv')) { system(KTUtil::safeShellString(array('/bin/mv', $sSrc, $sDst))); return; } $aSrcStat = stat($sSrc); if ($aSrcStat === false) { return PEAR::raiseError("Couldn't stat source file: $sSrc"); } $aDstStat = stat(dirname($sDst)); if ($aDstStat === false) { return PEAR::raiseError("Couldn't stat destination location: $sDst"); } if ($aSrcStat["dev"] === $aDstStat["dev"]) { $res = @rename($sSrc, $sDst); if ($res === false) { return PEAR::raiseError("Couldn't move file to destination: $sDst"); } return; } $res = @copy($sSrc, $sDst); if ($res === false) { return PEAR::raiseError("Could not copy to destination: $sDst"); } $res = @unlink($sSrc); if ($res === false) { return PEAR::raiseError("Could not remove source: $sSrc"); } } else { $res = @rename($sSrc, $sDst); if ($res === false) { return PEAR::raiseError("Could not move to destination: $sDst"); } } } // }}} // {{{ getTableName /** * The one true way to get the correct name for a table whilst * respecting the administrator's choice of table naming. */ function getTableName($sTable) { $sTable = $sTable . "_table"; if (isset($GLOBALS['default']->$sTable)) { return $GLOBALS['default']->$sTable; } return PEAR::raiseError('Could not find table: ' . $sTable); } // }}} // {{{ getId function getId($oEntity) { if (is_object($oEntity)) { if (method_exists($oEntity, 'getId')) { return $oEntity->getId(); } return PEAR::raiseError('Non-entity object'); } if (is_numeric($oEntity)) { return $oEntity; } return PEAR::raiseError('Non-entity object'); } // }}} // {{{ getObject function getObject($sClassName, &$iId) { if (is_object($iId)) { return $iId; } if (is_numeric($iId)) { return call_user_func(array($sClassName, 'get'), $iId); } return PEAR::raiseError('Non-entity object'); } // }}} // {{{ meldOptions function meldOptions($aStartOptions, $aAddOptions) { if (!is_array($aStartOptions)) { $aStartOptions = array(); } if (!is_array($aAddOptions)) { $aAddOptions = array(); } return array_merge($aStartOptions, $aAddOptions); } // }}} // {{{ getRequestScriptName function getRequestScriptName($server) { $request_uri = $server['REQUEST_URI']; $script_name = $server['SCRIPT_NAME']; /* * Until script_name is fully inside request_uri, strip off bits * of script_name. */ //print "Checking if $script_name is in $request_uri\n"; while ($script_name && strpos($request_uri, $script_name) === false) { //print "No it isn't.\n"; $lastslash = strrpos($script_name, '/'); $lastdot = strrpos($script_name, '.'); //print "Last slash is at: $lastslash\n"; //print "Last dot is at: $lastdot\n"; if ($lastslash > $lastdot) { $script_name = substr($script_name, 0, $lastslash); } else { $script_name = substr($script_name, 0, $lastdot); } //print "Checking is $script_name is in $request_uri\n"; } return $script_name; } // }}} // {{{ nameToLocalNamespace function nameToLocalNamespace ($sSection, $sName) { $sBase = generateLink(""); $sName = trim($sName); $sName = strtolower($sName); $sName = str_replace(array("'", "/",'"', " "), array(), $sName); $sSection = trim($sSection); $sSection = strtolower($sSection); $sSection = str_replace(array("'", "/",'"', " "), array(), $sSection); return $sBase . 'local' . '/' . $sSection . '/' . $sName; } // }}} } ?>