<?php
function ReadCSV ($file)
{
    if ((
$handle fopen($file"r")) !== FALSE) {
        
$all_rows = array();
        
$header null;
        while (
$row fgetcsv($handle)) {
            if (
$header === null) {
                
$header $row;
                continue;
            }
            
$all_rows[] = array_combine($header$row);
        }
        return 
$all_rows;
    } else return 
NULL;
}

function 
Lookup ($file$folderName)
{
    if ((
$handle fopen($file"r")) !== FALSE) {
        
$header null;
        while (
$row fgetcsv($handle)) {
            if (
$header === null) {
                
$header $row;
                continue;
            }
            
$vst array_combine($header$row);
            if (
$vst['folder'] == $folderName) return $vst;
        }
        return 
NULL;
    } else return 
NULL;
}

function 
HasAllTags ($vst$requiredTags)
{
    
$tags explode('|'$vst['tags']);
    foreach (
$requiredTags as $tag) if (!in_array($tag$tags)) return FALSE;
    return 
TRUE;
}

function 
HasNoTags ($vst$unwantedTags)
{
    
$tags explode('|'$vst['tags']);
    foreach (
$unwantedTags as $tag) if (in_array($tag$tags)) return FALSE;
    return 
TRUE;
}

function 
Filter ($vstArray$requiredTags$unwantedTags)
{
    
$outArray = array();
    foreach (
$vstArray as $vst)
    {
        if (
HasAllTags($vst$requiredTags) && HasNoTags($vst$unwantedTags))
            
$outArray[] = $vst;
    }
    return 
$outArray;
}

function 
ConvertTags ($tagsString)
{
    
$tags = array();
    foreach (
explode('|'strtolower(str_replace(' '''$tagsString))) as $tag)
    {
        if (
$tag == 'instrument') continue;
        if (
$tag == 'synthesizer'$tags[] = 'Synth';
        else 
$tags[] = ucfirst($tag);
    }
    return 
$tags;
}

function 
MakeBundle ($name$targets$format$downloadUrl)
{
    
$bundle = new stdClass();
    
$bundle->name $name;
    
$bundle->targets $targets;
    
$bundle->format $format;
    
$bundle->downloadUrl $downloadUrl;
    return 
$bundle;
}
?>