)
*
* @return string The image file name or an empty string
*/
function GetImgName($imageTag)
{
// Select src tag from img tag.
$match = [];
//preg_match('/(src=(["\'])1.*(["\'])1)/i', $imageTag, $match); //src
preg_match('/src(\s)*=(\s)*[\'"]([^\'"]*)[\'"]/i', $imageTag, $match); //get the img src as contained between " or '
//list($key, $srctag) = each($match);
$src = $match[3];
//$src = substr($srctag, 5, (strlen($srctag) - 7));
if (stristr($src, 'http') === false) {
// Valid or invalid image name.
if ($src == '') {
return '';
} else {
$tmp_src = basename($src);
if ($tmp_src == '') {
return $src;
} else {
return $tmp_src;
}
}
} else {
// The img tag contained "http", which means it is probably external. Ignore it.
return '';
}
}
/**
* Gets the source path of an image tag.
*
* @param string $imageTag An image tag
*
* @return string The image source or ""
*/
function GetSrcName($imageTag)
{
// Select src tag from img tag.
$match = [];
preg_match("|(src=\".*\" )|U", $imageTag, $match); //src
$srctag = reset($match);
$src = substr($srctag, 5, (strlen($srctag) - 7));
if (stristr($src, 'http') === false) {
// valid or invalid image name
return $src;
} else {
return '';
}
}
/**
* Gets the image parameters from an image path.
*
* @param string $fname File name
* @param string $fpath File path
* @param array $imgparams Reference to a list of image parameters (emptied, then used to return results)
* @param int $imgcount Reference to a counter of images (emptied, then used to return results)
*/
function GetImgParams($fname, $fpath, &$imgparams, &$imgcount)
{
// Select img tags from context.
$imgparams = [];
//phpinfo();
$contents = ReadFileCont("$fpath"."$fname");
$matches = [];
preg_match_all('()', $contents, $matches);
$imgcount = 0;
foreach ($matches as $match) {
// Each match consists of a key and a value.
foreach ($match as $imageTag) {
$imgname = GetImgName($imageTag);
if ($imgname != '' && !in_array($imgname, $imgparams)) {
array_push($imgparams, $imgname); // name (+ type) of the images in the html test
$imgcount = $imgcount + 1; // number of images in the html test
}
}
}
}
/**
* Generates a list of hidden fields with the image params given as parameter to this function.
*
* @param array $imgparams List of image parameters
*
* @return string String containing the hidden parameters built from the list given
*/
function GenerateHiddenList($imgparams)
{
$list = '';
if (is_array($imgparams)) {
foreach ($imgparams as $string) {
$list .= "\n";
}
}
return $list;
}
/**
* Searches for a node in the given array.
*
* @param array $array Reference to the array to search
* @param string $node Node we are looking for in the array
*
* @return mixed Node name or false if not found
*/
function myarraysearch(&$array, $node)
{
$match = false;
$tmp_array = [];
for ($i = 0; $i < count($array); $i++) {
if (!strcmp($array[$i], $node)) {
$match = $node;
} else {
array_push($tmp_array, $array[$i]);
}
}
$array = $tmp_array;
return $match;
}
/**
* Searches an image name into an array.
*
* @param array $imgparams Reference to an array to search
* @param string $string String to look for
*
* @return mixed String given if found, false otherwise
*
* @uses \myarraysearch This function is just an additional layer on the myarraysearch() function
*/
function CheckImageName(&$imgparams, $string)
{
$checked = myarraysearch($imgparams, $string);
return $checked;
}
/**
* Replaces an image tag by ???
*
* @param string $content The content to replace
*
* @return string The modified content
*/
function ReplaceImgTag($content)
{
$newcontent = $content;
$matches = [];
preg_match_all('()', $content, $matches);
foreach ($matches as $match) {
foreach ($match as $imageTag) {
$imgname = GetSrcName($imageTag);
if ($imgname != '') {
$prehref = $imgname;
$posthref = basename($imgname);
$newcontent = str_replace($prehref, $posthref, $newcontent);
}
}
}
return $newcontent;
}
/**
* Fills the folder name up to a certain length with "0".
*
* @param string $name Original folder name
* @param int $nsize Length to reach
*
* @return string Modified folder name
*/
function FillFolderName($name, $nsize)
{
$str = '';
for ($i = 0; $i < $nsize - strlen($name); $i++) {
$str .= '0';
}
$str .= $name;
return $str;
}
/**
* Generates the HotPotato folder tree.
*
* @param string $folder Folder path
*
* @return string Folder name (modified)
*/
function GenerateHpFolder($folder)
{
$filelist = [];
if ($dir = @opendir($folder)) {
while (($file = readdir($dir)) !== false) {
if ($file != '.') {
if ($file != '..') {
$full_name = $folder.'/'.$file;
if (is_dir($full_name)) {
$filelist[] = $file;
}
}
}
}
}
$name = '';
$w = true;
while ($w == true) {
$name = FillFolderName(mt_rand(1, 99999), 6);
$checked = myarraysearch($filelist, $name);
// As long as we find the name in the array, continue looping. As soon as we have a new element, quit.
if (!$checked) {
$w = false;
}
}
return $name;
}
/**
* Gets the folder name (strips down path).
*
* @param string $fname Path
*
* @return string Folder name stripped down
*/
function GetFolderName($fname)
{
$name = explode('/', $fname);
$name = $name[count($name) - 2];
return $name;
}
/**
* Gets the folder path (with out the name of the folder itself) ?
*
* @param string $fname Path
*
* @return string Path stripped down
*/
function GetFolderPath($fname)
{
$str = '';
$name = explode('/', $fname);
for ($i = 0; $i < sizeof($name) - 1; $i++) {
$str = $str.$name[$i].'/';
}
return $str;
}
/**
* Checks if there are subfolders.
*
* @param string $path Path
*
* @return int 1 if a subfolder was found, 0 otherwise
*/
function CheckSubFolder($path)
{
$folder = GetFolderPath($path);
$dflag = 0;
if ($dir = @opendir($folder)) {
while (($file = readdir($dir)) !== false) {
if ($file != '.') {
if ($file != '..') {
$full_name = $folder.'/'.$file;
if (is_dir($full_name)) {
$dflag = 1; // first directory
}
}
}
}
}
return $dflag;
}
/**
* Hotpotato Garbage Collector.
*
* @param string $folder Path
* @param int $flag Flag
* @param int $user_id User id
*/
function HotPotGCt($folder, $flag, $user_id)
{
// Garbage Collector
$filelist = [];
if ($dir = @opendir($folder)) {
while (($file = readdir($dir)) !== false) {
if ($file != '.') {
if ($file != '..') {
$full_name = $folder.'/'.$file;
if (is_dir($full_name)) {
HotPotGCt($folder.'/'.$file, $flag, $user_id);
} else {
$filelist[] = $file;
}
}
}
}
closedir($dir);
}
foreach ($filelist as $val) {
if (stristr($val, $user_id.'.t.html')) {
if ($flag == 1) {
my_delete($folder.'/'.$val);
} else {
echo $folder.'/'.$val.' ';
}
}
}
}
/**
* Deletes an attempt from TABLE_STATISTIC_TRACK_E_HOTPOTATOES.
*
* @param int $id
*/
function deleteAttempt($id)
{
$table = Database::get_main_table(TABLE_STATISTIC_TRACK_E_HOTPOTATOES);
$id = intval($id);
$sql = "DELETE FROM $table WHERE id = $id";
Database::query($sql);
}