<?php

require('../functions.php');

//mysql_select_db('temp'); // run here for testing!

//reload_quotes();
//reload_characters();
update_characters();
//reset_groups();
//createcsv();

function createcsv() {
    
$file fopen('hsquote.csv''w');
    
fprintf($filechr(0xEF).chr(0xBB).chr(0xBF));
    
fputcsv($file, array('quote_id''group_id''page_id''page_title''page_link''page_date''text''character_id''character_name''character_category'), ',''"');

    
$query "
        SELECT q.id as quote_id, q.grouping AS group_id, q.page AS page_id
                , p.title AS page_title, p.link AS page_link, p.post_date AS page_date
                , q.text AS text, q.`character` AS character_id
                , COALESCE(c.name, '') AS character_name
                , COALESCE(c.category, '') AS character_category
            FROM hsquote q
                INNER JOIN hspage p
                    ON q.page = p.id
                LEFT JOIN hscharacter c
                    ON q.`character` = c.id"
;
    
$result query($query);
    while(
$row mysql_fetch_array($resultMYSQL_ASSOC)) {
        
fputcsv($file$row',''"');
    }
    
fclose($file);
    
system("zip hsquote.zip hsquote.csv 2>&1");
}

function 
reset_groups() {
    
// Redo the groups now that we've done all this custom remapping
    
$result query("SELECT id, grouping, `character`, page, text FROM hsquote ORDER BY id;");
    
$page $old_group $character $group 0;
    while(
$row mysql_fetch_array($resultMYSQL_NUM)) {
        
$prev_page $page;
        
$prev_old_group $old_group;
        
$prev_character $character;
        
$id $row[0];
        
$old_group $row[1];
        
$character $row[2];
        
$page $row[3];
        
$text $row[4];

        
/*// same character split up
        if($character == $prev_character && $page == $prev_page && $old_group != $prev_old_group) {
            echo "$row[4]<br>";
        }
        continue;*/

        // Split out combined characters while retaining old splits
        
if($character != $prev_character || $page != $prev_page || $old_group != $prev_old_group) {
            
// ... except a few special cases
            
if(!((strpos($text'<.img') !== false && strpos($text'arquius_shades.png') === false && $page == $prev_page) || strpos($text')(er Imperious Condescension') !== false))
                
$group++;
        }
        
query("UPDATE hsquote SET grouping = $group WHERE id = $id;");
    }
}

function 
update_characters() {
    echo 
'<table>';
    
// These colors can contain narration, I've extracted as much as I can.
    
$ignore = array('''#05d000''#2ed73a''#4ac925''blue''red''white''#e4e4e4');
    
$result query('SELECT DISTINCT color, speaker FROM hsquote WHERE `character` = 0 ORDER BY speaker;');
    while(
$row mysql_fetch_array($result)) {
        
$color $row[0];
        
$speaker $row[1];
        if(
in_array(strtolower($color), $ignore) && $speaker == '')
            continue;
        
$link "<a href='?c=" urlencode($color) . "&s=" urlencode($speaker) . "'>view</a>";
        if(
strlen($color) > 0)
            echo 
"<tr><td>$link</td><td><span style='color: $color'>$color</span></td><td><span style='color: $color'>$speaker</span></td></tr>";
        else
            echo 
"<tr><td>$link</td><td>-</td><td>$speaker</tr>";
    }
    echo 
'</table>';
    
    if(isset(
$_GET['c']) || isset($_GET['s'])) {
        
$result query("SELECT CONCAT('<a href=\"http://www.mspaintadventures.com/', link, '\">view</a> ', text)
            from hsquote q inner join hspage p on q.page = p.id
            where `character` = 0 and color='" 
$_GET['c'] . "' and speaker = '" $_GET['s'] . "';");
        if(!
$result)
            echo 
mysql_error();
        while(
$row mysql_fetch_array($result)) {
            echo 
$row[0] . '<br>';
        }
    }
    
    return;
    
    
// Named updates, run first so we don't wipe out the custom ones
    
update_character('John''EB');
    
update_character('John''E8');
    
update_character('John''CEB');
    
update_character('John''''#0715cd');
    
update_character('John''GT''');
    
update_character('John''GT''#0715cd');
    
update_character('John''''#007eff');
    
update_character('John''(JOHN)''#0715cd');
    
update_character('Jake''GT''#1f9400');
    
update_character('Jake''''#1f9400');
    
update_character('Rose''TT''#b536da');
    
update_character('Rose''''#b536da');
    
update_character('Dave''''#e00707');
    
update_character('Roxy''TG''#ff6ff2');
    
update_character('Roxy''TG''#fbbaff');
    
update_character('Roxy''''#ff6ff2');
    
update_character('Dave''TG''#e00707');
    
update_character('Dave''?TG''#e00707');
    
update_character('Dave''CTG''#e00707');
    
update_character('Dirk''TT''#f2a400');
    
update_character('Sollux''TA');
    
update_character('Sollux''CTA');
    
update_character('Sollux''PTA');
    
update_character('Eridan''CA');
    
update_character('Eridan''FCA');
    
update_character('Eridan''PCA');
    
update_character('Eridan''''#6a006a');
    
update_character('Tavros''AT');
    
update_character('Tavros''FAT');
    
update_character('Tavros''PAT');
    
update_character('Jane''GG''#00d5f2');
    
update_character('Jane''''#00d5f2');
    
update_character('Jade''GG''#4ac925');
    
update_character('Jade''?GG''#4ac925');
    
update_character('Terezi''TER3Z1');
    
update_character('Calliope''Callie');
    
update_character('Horuss''Horrus');
    
update_character('Karkat''Karkats');
    
update_character('Mituna''M1TUN4');
    
update_character('Meenah''Meehah');
    
update_character('Karkat''CG');
    
update_character('Karkat''?CG');
    
update_character('Karkat''CCG');
    
update_character('Karkat''FCG');
    
update_character('Karkat''FCG2');
    
update_character('Karkat''PCG');
    
update_character('Karkat''PCG2');
    
update_character('Karkat''PCG3');
    
update_character('Karkat''PCG4');
    
update_character('Karkat''PCG5');
    
update_character('Karkat''PCG6');
    
update_character('Karkat''PCG7');
    
update_character('Karkat''''#626262');
    
update_character('Terezi''GC');
    
update_character('Terezi''CGC');
    
update_character('Terezi''FGC');
    
update_character('Terezi''PGC');
    
update_character('Terezi''''#008282');
    
update_character('Feferi''CC');
    
update_character('Feferi''CCC');
    
update_character('Feferi''PCC');
    
update_character('Feferi''CC');
    
update_character('Feferi''CC');
    
update_character('Aradia''AA');
    
update_character('Aradia''CAA');
    
update_character('Aradia''FAA');
    
update_character('Aradia''PAA');
    
update_character('Aradia''ARADIABOT');
    
update_character('Aradia''''#a10000');
    
update_character('Vriska''AG');
    
update_character('Vriska''CAG');
    
update_character('Vriska''FAG');
    
update_character('Vriska''PAG');
    
update_character('Nepeta''AC');
    
update_character('Nepeta''CAC');
    
update_character('Nepeta''FAC');
    
update_character('Equius''CT');
    
update_character('Equius''CCT');
    
update_character('Equius''FCT');
    
update_character('Kanaya''GA');
    
update_character('Kanaya''CGA');
    
update_character('Kanaya''FGA');
    
update_character('Kanaya''PGA');
    
update_character('Gamzee''TC');
    
update_character('Gamzee''FTC');
    
update_character('Gamzee''PTC');
    
update_character('Aranea''NEYTIRI');
    
update_character('Auto-Responder''TT''#e00707');
    
update_character('Davesprite''TG''#f2a400');
    
update_character('The Condesce'')(IC');
    
update_character('The Condesce''''#77003c');
    
update_character('Andrew Hussie''''#000000');
    
update_character('Doc Scratch''''#FFFFFF');
    
update_character('Mindfang''''#005682');
    
update_character('Calliope''UU''#929292');
    
update_character('Caliborn''UU''#323232');
    
update_character('Caliborn''UU''#2ed73a');
    
update_character('Caliborn''''#126628');
    
update_character('Caliborn''''#323232');
    
update_character('Dad Crocker''pipefan413''#4b4b4b');
    
update_character('Nanna''pipefan413''#00d5f2');
    
update_character('Serious Business users''1dapperblackshell');
    
update_character('Serious Business users''ChuffedAboutDuds');
    
update_character('Serious Business users''fedorafreak');
    
update_character('Serious Business users''FineryFiend');
    
update_character('Serious Business users''HATLIKER');
    
update_character('Serious Business users''NoNeed4PantsThx');
    
update_character('Serious Business users''WANT_MORE_SOCKS');
    
update_character('Salamanders''HABERDASHER');
    
update_character('Salamanders''MERCHANT');
    
update_character('Salamanders''SALAMANDER');

    
// Custom updates
    
query("UPDATE hsquote SET speaker = 'Doc Scratch' WHERE text like '%[<span style=\"color: #ffffff\">%';");
    
// scratch.php. also mysql is TERRIBLE
    
query("UPDATE hsquote SET speaker = 'Andrew Hussie' WHERE grouping IN (SELECT grouping FROM (SELECT grouping FROM hsquote q INNER JOIN hspage p ON q.page = p.id WHERE title LIKE '[o]%' AND color = 'black') x);");
    
query("UPDATE hsquote q INNER JOIN hspage p ON q.page = p.id SET speaker = 'Doc Scratch' WHERE (p.title LIKE '[o]%' OR p.title = 'o') AND q.speaker = '';");
    
query("UPDATE hsquote SET speaker = 'Doc Scratch' WHERE grouping IN (SELECT grouping FROM (SELECT grouping FROM hsquote q WHERE speaker = 'Doc Scratch') x) AND speaker = '';");
    
// Misc Caliborn
    
query("UPDATE hsquote q INNER JOIN hspage p ON q.page = p.id SET speaker = 'Caliborn' WHERE q.color = '#2ed73a' and speaker = '' AND NOT (p.title LIKE '[I]%' OR p.title = 'Be the white text guy.' OR p.title = 'Lord English: Reveal yourself!!!!!');");
    
query("UPDATE hsquote q SET speaker = 'Caliborn' WHERE page >= (SELECT MIN(id) FROM hspage WHERE title = 'HOMOSUCK.') AND q.color = '' and speaker = '' AND (text COLLATE utf8_bin) REGEXP '^[^a-z]+$';"); // All caps narration after homosuck begins is always Caliborn, so far.
    // Misc Hussie
    
query("UPDATE hsquote q INNER JOIN hspage p ON q.page = p.id SET speaker = 'Andrew Hussie' WHERE p.title = '[A6I2] ==>' AND color = '' AND speaker = '';");
    
query("UPDATE hsquote SET speaker = 'Andrew Hussie' WHERE speaker = '' AND page IN (SELECT id FROM hspage WHERE title LIKE 'AH:%');");
    
query("UPDATE hsquote SET speaker = 'Andrew Hussie' WHERE page <= (SELECT id FROM hspage WHERE title = 'AH: Reel it in.') AND page >= (SELECT id - 7 FROM hspage WHERE title = 'AH: Reel it in.') AND page NOT IN (SELECT id FROM hspage WHERE title = 'Oh my god.');");
    
query("UPDATE hsquote SET speaker = 'Andrew Hussie' WHERE page = (SELECT id FROM hspage WHERE link LIKE '%003578');");
    
// Misc Jade
    
query("UPDATE hsquote SET speaker = 'Jade' WHERE text = '<span style=\"color: #000000\">BARK</span>';");
    
query("UPDATE hsquote SET speaker = 'Jade' WHERE text = '<span style=\"color: #4ac925\">dear john,';");
    
query("UPDATE hsquote SET speaker = 'Jade' WHERE grouping IN (SELECT grouping FROM (SELECT grouping FROM hsquote q WHERE speaker = 'Jade' AND color = '#4ac925') x) AND speaker = '';");
    
// Misc Vriska
    
query("UPDATE hsquote SET speaker = 'Vriska' WHERE color = '#005682' AND (text LIKE '%memo%' OR text LIKE '%--%') AND speaker = '';");
    
// Misc John
    
query("UPDATE hsquote SET speaker = 'John' WHERE grouping IN (SELECT grouping FROM (SELECT grouping FROM hsquote q WHERE speaker = '' AND color = '#0715cd') x) AND speaker = '';");
    
// Misc Jake
    
query("UPDATE hsquote SET speaker = 'Jake' WHERE grouping IN (SELECT grouping FROM (SELECT grouping FROM hsquote q WHERE speaker = '' AND color = '#1f9400') x) AND speaker = '';");
    
// Misc Rose
    
query("UPDATE hsquote SET speaker = 'Rose' WHERE grouping IN (SELECT grouping FROM (SELECT grouping FROM hsquote q WHERE speaker = '' AND color = '#b536da') x) AND speaker = '';");
    
// Misc Dave
    
query("UPDATE hsquote SET speaker = 'Dave' WHERE grouping IN (SELECT grouping FROM (SELECT grouping FROM hsquote q WHERE speaker = '' AND color = '#e00707') x) AND speaker = '';");
    
// Misc Roxy
    
query("UPDATE hsquote SET speaker = 'Roxy' WHERE grouping IN (SELECT grouping FROM (SELECT grouping FROM hsquote q WHERE speaker = '' AND color = '#ff6ff2') x) AND speaker = '';");
    
// Misc Serenity
    
query("UPDATE hsquote SET speaker = 'Serenity' WHERE text like '%.-%' AND speaker = '';");
    
// Misc images
    
query("UPDATE hsquote SET speaker = 'Doc Scratch' WHERE text LIKE '%shehaswhat.gif%';");
    
query("UPDATE hsquote SET speaker = 'Becsprite' WHERE text LIKE '%becspeak.gif%';");
    
query("UPDATE hsquote SET speaker = 'Jadesprite' WHERE text LIKE '%whatdidyoudo.gif%';");
    
query("UPDATE hsquote SET speaker = 'Vriska' WHERE text LIKE '%scraps/vriska%';");
    
query("UPDATE hsquote SET speaker = 'Gamzee' WHERE text LIKE '%scraps/gamzee%';");
    
query("UPDATE hsquote SET speaker = 'Jane' WHERE text LIKE '%scraps/trickjane%';");
    
query("UPDATE hsquote SET speaker = 'Jake' WHERE text LIKE '%scraps/trickjake%';");
    
query("UPDATE hsquote SET speaker = 'Roxy' WHERE text LIKE '%scraps/trickroxy%';");
    
query("UPDATE hsquote SET speaker = 'Dirk' WHERE text LIKE '%scraps/trickdirk%';");
    
query("UPDATE hsquote SET speaker = 'Jane' WHERE text LIKE '%scraps/PEACHY.gif%';");
    
query("UPDATE hsquote SET speaker = 'Jane' WHERE text LIKE '%JAKENOOOOOO.gif%';");
    
query("UPDATE hsquote SET speaker = 'Vriska' WHERE text LIKE '%scraps/scorpio.gif%';");
    
query("UPDATE hsquote SET speaker = 'John' WHERE text LIKE '%scraps/johnblur%';");
    
query("UPDATE hsquote SET speaker = 'John' WHERE text LIKE '%scraps/JOHNNOOOOOO%';");
    
query("UPDATE hsquote SET speaker = 'Terezi' WHERE text LIKE '%scraps/glitchtext1.gif%';");
    
query("UPDATE hsquote SET speaker = 'Dirk' WHERE text LIKE '%scraps/glitchtext2.gif%';");
    
query("UPDATE hsquote SET speaker = 'Dave' WHERE text LIKE '%scraps/glitchtext3.gif%';");
    
query("UPDATE hsquote SET speaker = 'Aranea' WHERE text LIKE '%scraps/glitchtext4.gif%';");
    
query("UPDATE hsquote SET speaker = 'Dave' WHERE text LIKE '%scraps/dave%';");
    
query("UPDATE hsquote SET speaker = 'Vriska' WHERE text LIKE '%scraps/vristext%';");
    
query("UPDATE hsquote SET speaker = 'Jake' WHERE text LIKE '%scraps/jake_bigtext%';");
    
query("UPDATE hsquote SET speaker = 'Karkat' WHERE text LIKE '%scraps/karkat_blurtext%';");
    
query("UPDATE hsquote SET speaker = 'Aranea' WHERE text LIKE '%scraps/aranea%';");
    
query("UPDATE hsquote SET speaker = 'Gamzee' WHERE text LIKE '%scraps/BLOODHONK%';");
    
query("UPDATE hsquote SET speaker = 'Gamzee' WHERE text LIKE '%gamzsmallhonk.png%';");
    
query("UPDATE hsquote SET speaker = 'Vriska' WHERE text LIKE '%vris_fuckingloser.gif%';");

    
// Update all properly named speakers
    
$result query('SELECT name FROM hscharacter;');
    while(
$row mysql_fetch_array($result)) {
        
update_character($row[0], $row[0]);
    }
}

function 
update_character($character$speaker$color null) {
    
$sql "UPDATE hsquote SET `character` = (SELECT id FROM hscharacter WHERE name = '$character') WHERE speaker = '$speaker'";
    if(
$color !== null)
        
$sql .= " AND color = '$color'";
    if(!
query("$sql;"))
        echo 
mysql_error();
}

function 
reload_characters() {
    
query('TRUNCATE TABLE hscharacter;');
    
    
$categories = array(
        
'Beta Kids'                 => array('John Egbert''Rose Lalonde''Dave Strider''Jade Harley'),
        
'Alpha Kids'                => array('Jane Crocker''Roxy Lalonde''Dirk Strider''Jake English'),
        
'Beta Trolls'                => array('Aradia Megido''Tavros Nitram''Sollux Captor''Karkat Vantas''Nepeta Leijon''Kanaya Maryam''Terezi Pyrope''Vriska Serket''Equius Zahhak''Gamzee Makara''Eridan Ampora''Feferi Peixes'),
        
'Alpha Trolls'                => array('Damara Megido''Rufioh Nitram''Mituna Captor''Kankri Vantas''Meulin Leijon''Porrim Maryam''Latula Pyrope''Aranea Serket''Horuss Zahhak''Kurloz Makara''Cronus Ampora''Meenah Peixes'),
        
'Cherubs'                    => array('Calliope''Caliborn'),
        
'Misc Major Characters'        => array('Auto-Responder''Doc Scratch''Andrew Hussie'),
        
'Ancestors'                    => array('Mindfang''The Condesce'),
        
'Sprites'                    => array('Davesprite''Jadesprite''Rosesprite''Jaspersprite''Nannasprite''Jasprosesprite^2''ARquiusprite''Tavrosprite''Equiusprite''Calsprite''Aradiasprite''Dragonsprite''Tavrisprite''Erisolsprite''Fefetasprite''Mothersprite''Becsprite'),
        
'Guardians'                    => array('Dad Crocker''Nanna'),
        
'Misc Minor Characters'        => array('Serenity''Salamanders''Serious Business users''Squarewave')
    );
    foreach(
$categories as $category => $characters) {
        foreach(
$characters as $character) {
            if(
strpos($category'Kids') || strpos($category'Trolls'))
                
$short_name explode(' '$character)[0];
            else
                
$short_name $character;
            
query("INSERT INTO hscharacter (name, category, fullname) VALUES ('$short_name', '$category', '$character');");
        }
    }
}

function 
reload_quotes() {
    
query('TRUNCATE TABLE hsquote;');
    
query('TRUNCATE TABLE hspage;');
    
query('CREATE TABLE tmp_hsquote LIKE hsquote;');

    
$group 0;
    
$page 0;
    
$handle fopen(realpath(dirname(__FILE__)) . "/data_html.txt""r");
    while ((
$line fgets($handle)) !== false) {
        if(
strpos($line'?s=6&p=') === 0) {
            
$group++;
            
$parts explode("\t"$line);
            
$link trim($parts[0]);
            
$result query("SELECT id FROM hspage WHERE link = '$link';");
            if(
mysql_num_rows($result) > 0) {
                
$page mysql_result($result0);
                continue;
            }

            
$title mysql_real_escape_string(html_entity_decode(trim(trim($parts[1]), '"')));
            
$date $parts[2];
            
$result query("INSERT INTO hspage (post_date, link, title) VALUES (str_to_date('$date', '%m/%d/%y'), '$link', '$title');");
            if(!
$result)
                echo 
mysql_error();
            
$page mysql_insert_id();
            continue;
        }

        
$prev_speaker $speaker;
        
$prev_color $color;
        
$color $speaker $text '';
        
$line trim(html_entity_decode($line));

        if(
preg_match('/^<span style="color:([^"]+)/'$line$matches))
            
$color trim($matches[1]);
        
        if(
preg_match('/^(<span[^>]*>)?(\S+):/'$line$matches))
            
$speaker $matches[2];
        if(
preg_match('/^<span[^>]*>(...?)<\/span>.*banned/'$line$matches))
            
$speaker $matches[1];
        if(
preg_match('/^<span[^>]*>[^>]*\[(...?)\].*to memo/'$line$matches))
            
$speaker $matches[1];
        if(
preg_match('/<span[^>]*>[^>]*\[(...?)\].*blocked/'$line$matches))
            
$speaker $matches[1];
        
        
// Start a new group if the speaker changed.
        // Or, if the speaker is named and stayed the same but the color changed to handle Dirk/AR conversations
        
if($speaker != $prev_speaker || ($speaker != '' && $speaker == $prev_speaker && $color != $prev_color))
            
$group++;

        
$result query("INSERT INTO tmp_hsquote (grouping, speaker, page, color, text)
                VALUES (
$group, '" mysql_real_escape_string($speaker) . "', $page, '$color', '" mysql_real_escape_string($line) . "');");
        if(!
$result)
            echo 
mysql_error();
    }
    
    
query('INSERT INTO hsquote (grouping, speaker, page, color, text)
            SELECT grouping, speaker, page, color, text
            FROM tmp_hsquote
            ORDER BY page, id;'
);
    
query('DROP TABLE tmp_hsquote;');
    
    
// A bit of manual cleanup
    
query("UPDATE hsquote SET speaker = '' WHERE speaker IN ('(Hint', '06', '10', '>', 'Calories', 'Examine', 'Left', 'Lo', 'Right');");
}