PHP Labware source code viewer / Internal utilities | 29 Mar, 2024
Root | Help
./LabWiki/_util.php
<?php

/*
LabWiki 1.2.1, 22 August 2012, by Santosh Patnaik, MD, PhD. Based on QwikiWiki 1.5 of David Barrett
*/

// QWFatalError
function QWFatalError( $message )
{
	// Output the message and exit
	echo "<strong>Fatal QwikiWiki Error</strong>: ".$message."</body></html>";
	exit;
}

// QWLockExists
function QWLockExists( $lockPath )
{
	// See if it exists and hasn't expired
	global $QW_CONFIG;
	return file_exists( $lockPath ) && (time() - filemtime( $lockPath )) < $QW_CONFIG['editLockfileExpiration'];
}

// QWCreateLockfile
function QWCreateLockfile( $globalLockPath, $lockPath, $who )
{
	// First acquire a lock on the globalLockPath by opening and block-locking
	$lockFP = fopen( $globalLockPath, 'w+' ) or QWFatalError( "Cannot lock '".$globalLockPath."' because it does not exist!" );
	flock( $lockFP, LOCK_EX ) or QWFatalError( "Cannot lock '".$globalLockPath."' - do not know why!" );
	
	// Check to see if it exists
	global $QW_CONFIG;
	$alreadyExists = file_exists( $lockPath );
	$gotLock = false;
	if( !$alreadyExists || (time() - filemtime( $lockPath )) > $QW_CONFIG['editLockfileExpiration'] )
	{
		// Create the file
		$fp = fopen( $lockPath, 'w' );
		fwrite( $fp, $who );
		fclose( $fp );
		$gotLock = true;
	}
	
	// Release the global lock
	flock( $lockFP, LOCK_UN ) or QWFatalError( "Cannot unlock '".$globalLockPath."' - do not know why!" );
	fclose( $lockFP );
	
	// Return whether or not this successfully created a new file
	return $gotLock;
}

// QWHoldsLockfile
function QWHoldsLockfile( $globalLockPath, $lockPath, $who )
{
	// First acquire a lock on the globalLockPath by opening and block-locking
	$lockFP = fopen( $globalLockPath, 'w+' ) or QWFatalError( "Cannot lock '".$globalLockPath."' because it does not exist!" );
	flock( $lockFP, LOCK_EX ) or QWFatalError( "Cannot lock '".$globalLockPath."' - do not know why!" );
	
	// Check to see if it exists
	$holdsIt = false;
	if( file_exists( $lockPath ) )
	{
		// Read it and see who holds it
		$fileArray = FILE( $lockPath );
		$holdsIt = ($fileArray[0] == $who);
	}
	
	// Release the global lock
	flock( $lockFP, LOCK_UN ) or QWFatalError( "Cannot unlock '".$globalLockPath."' - do not know why!" );
	fclose( $lockFP );
	
	// Return whether or not this lock is held by the indicated owner
	return $holdsIt;
}

// QWSafeGet
// Access an array using an index that might not exist without producing an
// "undefined index" warning
function QWSafeGet( &$varArray, $varIndex )
{
	// If it's set, return the value, else return false
	if( isset( $varArray[$varIndex] ) ) return $varArray[$varIndex];
	else return false;
}

// QWStripArraySlashes
function QWStripArraySlashes( &$varArray )
{
	// Walk across and strip it recursively
	if( count( $varArray ) ) foreach( $varArray as $name => $value )
	{
		if( is_array( $value ) ) QWStripArraySlashes( $value );
		elseif(get_magic_quotes_gpc()){
			$varArray[$name] = stripslashes( $value );		
		}
	}
}

// QWClearCookies
function QWClearCookies( &$array, $path )
{
	// Loop across the named cookie array
	if( is_array( $array ) ) foreach( $array as $name => $value )
	{
		if( is_array( $value ) )
		{
			// If it's the first level, don't surround in brackets
			if( $path ) QWClearCookies( $value, "{$path}[{$name}]" );
			else QWClearCookies( $value, "$name" );
		}
		else
		{
			// Erase this cookie
			if( $path ) setcookie( "{$path}[{$name}]", "", time()-3600 );
			else setcookie( $name, "", time()-3600 );
		}
	}
}

// QWRedirect
function QWRedirect( $relativeURL )
{
	// Send the redirection header
	global $QW;
	$url = $QW['homeLink'].'/'.$relativeURL;
	header("Location: ".$url);
	echo '<p>Please wait - redirecting to <a href="'.$url.'">here</a>.</p>';
}

// QWDisableCaching
function QWDisableCaching( )
{
	global $QW_CONFIG;
	header("Cache-Control: no-store, no-cache, must-revalidate");
	header("Cache-Control: post-check=0, pre-check=0", false);
	header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
	header("Pragma: no-cache");
	header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
	header("Cache-control: private");
	header('Content-Type: text/html; charset='.$QW_CONFIG['encoding']);
}

// QWVerifyDirectory
function QWVerifyDirectory( $directory )
{
	// If it doesn't exist, create it and inheret from this directory's permissions
	if( !is_dir( $directory ) )
	{
		// Make a new backup directory
		$stats = stat( "." );
		$mode = $stats[2];
		if( !mkdir( $directory, $mode ) ) return "Error! - cannot create '".$directory."'";
	}
}

// QWGetRecentlyChangedFileList
// Loop across the contents of a directory and create a list of files
// that match the pattern, sorted by modifed date
function QWGetRecentlyChangedFileList( $directory, $pattern )
{
	// Get the dir and loop across
	$dir = dir( $directory );	
	while( $filename = $dir->read( ) )
		if( preg_match( $pattern, $filename ) )
			// Put into buckets by timestamp (potentially many changes in one second)
			$changeList[ filemtime( "$directory/$filename" ) ][] = $filename;
	$dir->close( );
		
	// Sort the list
	krsort( $changeList );
	foreach( $changeList as $timestamp => $fileList )
		foreach( $fileList as $filename )
			$outList[] = $filename;
	
	// Done
	return $outList;
}

// QWTruncateArrayInPlace
function QWTruncateArrayInPlace( &$inout, $maxSize )
{
	// Trim off anything greater than $maxSize;
	if( isset( $inout ) && is_array( $inout ) && count( $inout ) > $maxSize )
		// Update the reference
		$inout = array_slice( $inout, 0, $maxSize );
}

// QWUnduplicateArray
function QWUnduplicateArray( &$in )
{
	// Loop across and remove consecutive duplicates
	// Loop across and create a new array containing non-unique values
	if( isset( $in ) && is_array( $in ) )
		foreach( $in as $element )
			if( !isset( $out ) || ($element != end($out)) )			
				$out[] = $element;
	// Done
	return $out;
}

// QWCollapseArray
function QWCollapseArray( &$in, $separator, $finisher )
{
	// Loop accrossa and create a string containing a commma-separated list of the array entries
	$out = "";
	if( isset( $in ) && is_array( $in ) && count( $in ) )
	{
		// Insert a comma after all but the last
		for( $c=0; $c<count($in)-1; ++$c ) $out .= $in[$c] . $separator;
		$out .= $finisher . $in[$c];
	}
	return $out;
}

// QWGetFileContents
function QWGetFileContents( $path )
{
	// Just read the file into a big string
	$fileArray = file( $path );
	$out = "";
	if( isset( $fileArray ) && is_array( $fileArray ) && count( $fileArray ) )
		foreach( $fileArray as $line )
			$out .= $line;
	return $out;
}

function QWValidPageName($page) {
    global $QW_CONFIG;
    $validPageName = preg_match($QW_CONFIG['pageNamePattern'], $page); 
	return $validPageName;
}

// QWGetFileList
// Loop across the contents of a directory and create a list of files
// that match the pattern, sorted by modifed date
function QWGetFileList( $directory, $pattern )
{
	// Get the dir and loop across
	$dir = dir( $directory );	
	while( $filename = $dir->read( ) )
		if( preg_match( $pattern, $filename ) )
			// Put into the list
			$outList[$filename] = $filename;
	$dir->close( );
	ksort( $outList );
	// Done
	return $outList;
}
Presented with Sourceer
PHP Labware home | visitors since Sept 2017