<?php 
 | 
class kino implements module { 
 | 
    static function register_cmd() { 
 | 
        return array( 
 | 
            'kino' => 'cmd_kino', 
 | 
            'kina' => 'cmd_kino', 
 | 
            'k' => 'cmd_kino', 
 | 
            'rep' => 'cmd_kino', 
 | 
            'repertuar' => 'cmd_kino', 
 | 
            'u' => 'cmd_ustaw', 
 | 
            'ustaw' => 'cmd_ustaw', 
 | 
        ); 
 | 
    } 
 | 
     
 | 
    static function help($cmd = NULL) { 
 | 
        if($cmd === NULL) { 
 | 
            GGapi::putRichText('kino ', TRUE); 
 | 
            GGapi::putRichText('miasto nazwa [kiedy]', FALSE, TRUE); 
 | 
            GGapi::putRichText("\n".'   Repertuar kina '); 
 | 
            GGapi::putRichText('nazwa', FALSE, TRUE); 
 | 
            GGapi::putRichText("\n"); 
 | 
            GGapi::putRichText('ustaw ', TRUE); 
 | 
            GGapi::putRichText('miasto nazwa', FALSE, TRUE); 
 | 
            GGapi::putRichText("\n".'   Ustawia domyślne kino '."\n\n"); 
 | 
        } 
 | 
        elseif(substr($cmd, 0, 1)=='u') { 
 | 
            GGapi::putRichText('ustaw ', TRUE); 
 | 
            GGapi::putRichText('miasto nazwa', FALSE, TRUE); 
 | 
            GGapi::putRichText("\n".'   Ustawia domyślną lokalizację dla komendy kino na '); 
 | 
            GGapi::putRichText('[nazwa]', FALSE, TRUE); 
 | 
            GGapi::putRichText(' w mieście '); 
 | 
            GGapi::putRichText('[miasto]', FALSE, TRUE); 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            GGapi::putRichText('kino ', TRUE); 
 | 
            GGapi::putRichText('miasto nazwa [kiedy]', FALSE, TRUE); 
 | 
            GGapi::putRichText("\n".'   Repertuar kina '); 
 | 
            GGapi::putRichText('nazwa', FALSE, TRUE); 
 | 
            GGapi::putRichText(' w mieście '); 
 | 
            GGapi::putRichText('miasto', FALSE, TRUE); 
 | 
            GGapi::putRichText(' na '); 
 | 
            GGapi::putRichText('[kiedy]', FALSE, TRUE); 
 | 
            GGapi::putRichText(' (dziś, jutro, pojutrze)'); 
 | 
        } 
 | 
    } 
 | 
     
 | 
    static function cmd_ustaw($cmd, $arg) { 
 | 
        $arg = funcs::utfToAscii($arg); 
 | 
         
 | 
        database::add($_GET['from'], 'kino', 'kino', $arg); 
 | 
         
 | 
        if(empty($arg)) { 
 | 
            GGapi::putText('Usunięto domyślne kino. Aby otrzymać listę dostępnych obiektów wpisz:'."\n"); 
 | 
            GGapi::putRichText('kino', TRUE); 
 | 
            GGapi::putRichText(' Miasto', FALSE, TRUE); 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            GGapi::putText('Podane kino zostało zapisane jako domyślne. Sprawdź, czy jest poprawne wpisując:'."\n"); 
 | 
            GGapi::putRichText('kino', TRUE); 
 | 
        } 
 | 
    } 
 | 
     
 | 
    static function cmd_kino($cmd, $arg) { 
 | 
        $arg = funcs::utfToAscii($arg); 
 | 
        if(empty($arg)) { 
 | 
            $arg = database::get($_GET['from'], 'kino', 'kino'); 
 | 
            if(empty($arg)) { 
 | 
                GGapi::putText('Podaj nazwę miejscowości i kina.'."\n\n"); 
 | 
                GGapi::putRichText('Przykłady', FALSE, FALSE, TRUE); 
 | 
                GGapi::putRichText("\n".'kino Kraków'."\n".'kino Kraków Multikino'); 
 | 
                return FALSE; 
 | 
            } 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            $arg2 = database::get($_GET['from'], 'kino', 'kino'); 
 | 
        } 
 | 
         
 | 
        /* 
 | 
            MIASTO 
 | 
        */ 
 | 
        $miasta = self::getMiasta(); $found = FALSE; 
 | 
         
 | 
        if(!$miasta) { 
 | 
            GGapi::putText('Przepraszamy, wystąpił bład przy pobieraniu listy miejscowości.'); 
 | 
            return FALSE; 
 | 
        } 
 | 
         
 | 
        foreach($miasta as $miasto => $miasto_num) { 
 | 
            if(($pos = strpos($arg, funcs::utfToAscii($miasto))) !== FALSE) { 
 | 
                $found = $miasto_num; 
 | 
                $arg = trim(str_replace('  ', ' ', substr($arg, 0, $pos).substr($arg, $pos+strlen(funcs::utfToAscii($miasto))))); 
 | 
                break; 
 | 
            } 
 | 
        } 
 | 
         
 | 
        if($found===FALSE && !empty($arg2)) { 
 | 
            foreach($miasta as $miasto => $miasto_num) { 
 | 
                if(($pos = strpos($arg2, funcs::utfToAscii($miasto))) !== FALSE) { 
 | 
                    $found = $miasto_num; 
 | 
                    $arg2 = trim(str_replace('  ', ' ', substr($arg2, 0, $pos).substr($arg2, $pos+strlen(funcs::utfToAscii($miasto))))); 
 | 
                    break; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
         
 | 
        if($found === FALSE) { 
 | 
            $txt = 'Wybrane miasto nie został odnalezione. Dostępne miejscowości:'; 
 | 
            foreach($miasta as $miasto => $num) { 
 | 
                $txt .= "\n".$miasto; 
 | 
            } 
 | 
            GGapi::putText($txt); 
 | 
            return FALSE; 
 | 
        } 
 | 
         
 | 
         
 | 
        /* 
 | 
            KIEDY 
 | 
        */ 
 | 
        $tydzien = array('niedziela', 'poniedzialek', 'wtorek', 'sroda', 'czwartek', 'piatek', 'sobota'); 
 | 
        $data = array( 
 | 
            'dzis' => '', 
 | 
            'teraz' => '', 
 | 
            'jutro' => '1', 
 | 
            'pojutrze' => '2', 
 | 
            'po jutrze' => '2', 
 | 
        ); 
 | 
        for($i=0; $i<3; $i++) { 
 | 
            $data[date('d.m', strtotime('+'.$i.' day'))] = ($i ? $i : ''); 
 | 
            $data[date('j.m', strtotime('+'.$i.' day'))] = ($i ? $i : ''); 
 | 
        } 
 | 
         
 | 
        $czas = ''; 
 | 
        foreach($data as $known => $d) { 
 | 
            if(($pos = strpos($arg, $known))!==FALSE) { 
 | 
                $czas = $d; 
 | 
                $arg = trim(str_replace('  ', ' ', substr($arg, 0, $pos).substr($arg, $pos+strlen($known)))); 
 | 
                break; 
 | 
            } 
 | 
        } 
 | 
         
 | 
        /* 
 | 
            KINO 
 | 
        */ 
 | 
        $kina = self::getKina($miasto_num, $czas); $found = FALSE; 
 | 
         
 | 
        if(!$kina) { 
 | 
            GGapi::putText('Przepraszamy, wystąpił bład przy pobieraniu listy kin.'); 
 | 
            return FALSE; 
 | 
        } 
 | 
         
 | 
        if(empty($kina)) { 
 | 
            GGapi::putText(($czas == '1' ? 'Jutro' : ($czas == '2' ? 'Pojutrze' : 'Dziś')).' żadne filmy nie są wyświetlane w podanym mieście.'."\n\n"); 
 | 
            GGapi::putRichText('Spróbuj też:', FALSE, FALSE, TRUE); 
 | 
            GGapi::putRichText("\n".'kino '.$miasto.' '.$kino.' '.($czas != '1' ? 'jutro' : ($czas != '2' ? 'pojutrze' : 'dziś')). 
 | 
                    "\n".'kino '.$miasto.' '.$kino.' '.($czas != '' ? 'dziś' : ($czas != '2' ? 'pojutrze' : 'dziś'))); 
 | 
            return FALSE; 
 | 
        } 
 | 
         
 | 
        if(!empty($arg)) { 
 | 
            foreach($kina as $kino => $kino_id) { 
 | 
                if(levenshtein(funcs::utfToAscii($kino), $arg, 1, 1, 0) < 2) { 
 | 
                    $found = $kino_id; 
 | 
                    break; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
         
 | 
        if($found===FALSE && !empty($arg2)) { 
 | 
            foreach($kina as $kino => $kino_id) { 
 | 
                if(levenshtein(funcs::utfToAscii($kino), $arg2, 1, 1, 0) < 2) { 
 | 
                    $found = $kino_id; 
 | 
                    break; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
         
 | 
        if($found === FALSE) { 
 | 
            $txt = (!empty($arg) ? 'Podany obiekt nie został znaleziony. ' : '').'Dostępne kina w pasujących miastach:'; 
 | 
            foreach($kina as $kino => $num) { 
 | 
                $txt .= "\n".$miasto.' '.$kino; 
 | 
            } 
 | 
            GGapi::putText($txt."\n\n"); 
 | 
            GGapi::putRichText('Przykład:', FALSE, FALSE, TRUE); 
 | 
            GGapi::putRichText("\n".'kino '.$miasto.' '.$kino.' '.($czas == '1' ? 'jutro' : ($czas == '2' ? 'pojutrze' : 'dziś'))); 
 | 
            return FALSE; 
 | 
        } 
 | 
         
 | 
        /* 
 | 
            REPERTUAR 
 | 
        */ 
 | 
        $filmy = self::getKino($miasto_num, $kino_id, $czas); 
 | 
         
 | 
        if(!$filmy) { 
 | 
            GGapi::putText('Przepraszamy, wystąpił bład przy pobieraniu listy wyświelanych filmów.'); 
 | 
            return FALSE; 
 | 
        } 
 | 
         
 | 
        GGapi::putRichText('Repertuar dla kina '.$kino.' ('.$miasto.') na '.($czas == '1' ? 'jutro' : ($czas == '2' ? 'pojutrze' : 'dziś')).':', TRUE); 
 | 
        if(empty($filmy)) { 
 | 
            GGapi::putRichText("\n".'Brak repertuaru'); 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            foreach($filmy as $film) { 
 | 
                $txt .= "\n".$film[0].' '.$film[1]; 
 | 
            } 
 | 
        } 
 | 
        GGapi::putRichText($txt); 
 | 
    } 
 | 
     
 | 
    static function tidy($code) { 
 | 
        $tidy = new tidy; 
 | 
        $tidy->parseString($code, array( 
 | 
            'add-xml-decl'    => true, 
 | 
            'output-xml'    => true, 
 | 
        ), 'raw'); 
 | 
        $tidy->CleanRepair(); 
 | 
        return str_replace(array(' ', 'margin:="'), array(' ', 'margin="'), (string)$tidy); 
 | 
    } 
 | 
     
 | 
    static function cache($url) { 
 | 
        $time = '+2 hour'; $dir = './data/kino/cache/'; 
 | 
         
 | 
        if(file_exists($dir.md5($url))) { 
 | 
            $mtime = @filemtime($dir.md5($url)); 
 | 
        } 
 | 
        if($mtime && $mtime > strtotime('today '.$time) && $mtime < strtotime('tomorrow '.$time)) { 
 | 
            return file_get_contents($dir.md5($url)); 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            $dane = @file_get_contents($url); 
 | 
            if(!$dane) { 
 | 
                trigger_error('Nie udało się pobrać repertuaru kina, przepraszamy.', E_USER_ERROR); 
 | 
            } 
 | 
            $dane = self::tidy($dane); 
 | 
            file_put_contents($dir.md5($url), $dane); 
 | 
            return $dane; 
 | 
        } 
 | 
    } 
 | 
     
 | 
    static function getMiasta() { 
 | 
        $return = array(); 
 | 
        $dane = @simplexml_load_string(self::cache('http://film.interia.pl/kino/repertuar')); 
 | 
        if(!$dane) return FALSE; 
 | 
        $dane = $dane->xpath('//div[@id=\'cities\']//a'); 
 | 
        foreach($dane as $miasto) { 
 | 
            $miasto['href'] = (string)$miasto['href']; 
 | 
            $return[str_replace(array("\r\n", "\r", "\n"), array(' ', ' ', ' '), (string)$miasto)] = substr($miasto['href'], strpos($miasto['href'], ',')+1); 
 | 
        } 
 | 
         
 | 
        return $return; 
 | 
    } 
 | 
     
 | 
    static function getKina($miasto, $kiedy='') { 
 | 
        $return = array(); 
 | 
        $dane = @simplexml_load_string(self::cache('http://film.interia.pl/kino/repertuar//kina,'.$miasto.($kiedy ? ','.$kiedy : ''))); 
 | 
        if(!$dane) return FALSE; 
 | 
        $dane = $dane->xpath('//div[@id=\'mainContent\']/table//th[@class=\'theatre\']/a[1]'); 
 | 
        if(!empty($dane)) { 
 | 
            foreach($dane as $kino) { 
 | 
                $return[str_replace(array("\r\n", "\r", "\n"), array(' ', ' ', ' '), (string)$kino)] = (string)$kino['name']; 
 | 
            } 
 | 
        } 
 | 
        return $return; 
 | 
    } 
 | 
     
 | 
    static function getKino($miasto, $kino, $kiedy='') { 
 | 
        $return = array(); 
 | 
        $dane = @simplexml_load_string(self::cache('http://film.interia.pl/kino/repertuar//kina,'.$miasto.($kiedy ? ','.$kiedy : ''))); 
 | 
        if(!$dane) return FALSE; 
 | 
        $dane = $dane->xpath('//div[@id=\'mainContent\']/table//a[@name=\''.$kino.'\']/../../following-sibling::tr'); 
 | 
        if(!empty($dane)) { 
 | 
            foreach($dane as $film) { 
 | 
                if($film->th) break; 
 | 
                $return[] = array((string)$film->td[1], str_replace(array("\r\n", "\r", "\n"), array(' ', ' ', ' '), (string)$film->td[0]->a)); 
 | 
            } 
 | 
        } 
 | 
        return $return; 
 | 
    } 
 | 
} 
 | 
?> 
 |