Example #1
0
 public static function work(&$controllerContext, &$viewContext)
 {
     HttpHeadersHelper::setCurrentHeader('Content-Type', 'text/html');
     assert(!empty($controllerContext->module));
     $module = $controllerContext->module;
     $module::work($controllerContext, $viewContext);
 }
 public static function work(&$controllerContext, &$viewContext)
 {
     $viewContext->viewName = null;
     unset($_SESSION['logged-in']);
     $url = AdminControllerLoginModule::url();
     HttpHeadersHelper::setCurrentHeader('Location', $url);
 }
Example #3
0
 public static function renderFile($name, $viewContext)
 {
     if (empty($name)) {
         return;
     }
     $path = __DIR__ . DIRECTORY_SEPARATOR . $name . '.phtml';
     ob_start();
     try {
         include $path;
         $output = ob_get_contents();
     } finally {
         ob_end_clean();
     }
     if (HttpHeadersHelper::getCurrentHeader('Content-Type') != 'text/html' && HttpHeadersHelper::getCurrentHeader('Content-Type') != 'text/html;charset=UTF-8') {
         echo $output;
         return;
     }
     $output = str_replace(' />', '/>', $output);
     $output = str_replace(' >', '>', $output);
     $output = preg_replace_callback('/<[^>]+>/', function ($m) {
         return str_replace("\t", ' ', $m[0]);
     }, $output);
     $output = str_replace(["\t", "\r", "\n"], '', $output);
     $i = strpos($output, '  ');
     while ($i !== false) {
         $output = substr_replace($output, '', $i, 1);
         $i = strpos($output, '  ', $i);
     }
     echo $output;
 }
Example #4
0
 public static function benchmark($message = 'ping')
 {
     $now = microtime(true);
     $delta = $now - self::$prev;
     $deltaBig = $now - self::$start;
     self::$prev = $now;
     HttpHeadersHelper::setCurrentHeader('Content-Type', 'text/plain');
     printf('%.05f/%.05f: %s' . PHP_EOL, $delta, $deltaBig, $message);
 }
Example #5
0
 public static function preWork(&$controllerContext, &$viewContext)
 {
     $controllerContext->cache->setPrefix($controllerContext->userName);
     if (BanHelper::getUserBanState($controllerContext->userName) == BanHelper::USER_BAN_TOTAL) {
         $controllerContext->cache->bypass(true);
         $viewContext->userName = $controllerContext->userName;
         $viewContext->viewName = 'error-user-blocked';
         $viewContext->meta->title = 'User blocked &#8212; ' . Config::$title;
         return;
     }
     $module = $controllerContext->module;
     HttpHeadersHelper::setCurrentHeader('Content-Type', $module::getContentType());
     $viewContext->media = $controllerContext->media;
     $viewContext->module = $controllerContext->module;
     $viewContext->meta->noIndex = true;
     $viewContext->contentType = $module::getContentType();
     if ($viewContext->contentType != 'text/html') {
         $viewContext->layoutName = 'layout-raw';
     }
     Database::selectUser($controllerContext->userName);
     $user = R::findOne('user', 'LOWER(name) = LOWER(?)', [$controllerContext->userName]);
     if (empty($user)) {
         if (!isset($_GET['referral']) || $_GET['referral'] !== 'search') {
             $controllerContext->cache->bypass(true);
             $viewContext->userName = $controllerContext->userName;
             $viewContext->viewName = 'error-user-not-found';
             $viewContext->meta->title = 'User not found &#8212; ' . Config::$title;
             return;
         }
         $queue = new Queue(Config::$userQueuePath);
         $queueItem = new QueueItem(strtolower($controllerContext->userName));
         $queue->enqueue($queueItem);
         $viewContext->queuePosition = $queue->seek($queueItem);
         $controllerContext->cache->bypass(true);
         //try to load cache, if it exists
         $url = $controllerContext->url;
         if ($controllerContext->cache->exists($url)) {
             $controllerContext->cache->load($url);
             flush();
             $viewContext->layoutName = null;
             $viewContext->viewName = null;
             return;
         }
         $viewContext->userName = $controllerContext->userName;
         $viewContext->viewName = 'error-user-enqueued';
         $viewContext->meta->title = 'User enqueued &#8212; ' . Config::$title;
         return;
     }
     $viewContext->user = $user;
     $viewContext->meta->styles[] = '/media/css/menu.css';
     $viewContext->updateWait = Config::$userQueueMinWait;
     $module = $controllerContext->module;
     $module::preWork($controllerContext, $viewContext);
 }
Example #6
0
 public static function work(&$controllerContext, &$viewContext)
 {
     session_start();
     if (!isset($_SESSION['logged-in'])) {
         $controllerContext->module = 'AdminControllerLoginModule';
     }
     HttpHeadersHelper::setCurrentHeader('Content-Type', 'text/html');
     assert(!empty($controllerContext->module));
     $module = $controllerContext->module;
     $module::work($controllerContext, $viewContext);
 }
Example #7
0
 private static function parseResult($result, $url)
 {
     $pos = strpos($result, "\r\n\r\n");
     $content = substr($result, $pos + 4);
     $headerLines = explode("\r\n", substr($result, 0, $pos));
     preg_match('/\\d{3}/', array_shift($headerLines), $matches);
     if (!isset($matches[0])) {
         throw new DownloadFailureException($url, 'Server didn\'t return response code');
     }
     $code = intval($matches[0]);
     $headers = HttpHeadersHelper::parseHeaderLines($headerLines);
     return new Document($url, $code, $headers, $content);
 }
 public static function work(&$controllerContext, &$viewContext)
 {
     $viewContext->viewName = 'admin-login';
     $viewContext->meta->title = 'MALgraph - admin';
     WebMediaHelper::addCustom($viewContext);
     if (isset($_POST['password'])) {
         $viewContext->entered = $_POST['password'];
         $_SESSION['logged-in'] = $_POST['password'] == Config::$adminPassword;
         if ($_SESSION['logged-in']) {
             $url = AdminControllerIndexModule::url();
             $viewContext->viewName = null;
             HttpHeadersHelper::setCurrentHeader('Location', $url);
         }
     }
 }
 public static function work(&$controllerContext, &$viewContext)
 {
     $username = !empty($_POST['user-name']) ? trim($_POST['user-name']) : '';
     if (empty($username)) {
         $viewContext->layoutName = null;
         $uri = IndexControllerIndexModule::url();
         HttpHeadersHelper::setCurrentHeader('Location', $uri);
         return;
     }
     if (!preg_match('#^' . UserController::getUserRegex() . '$#', $username)) {
         $viewContext->viewName = 'error-user-invalid';
         return;
     }
     $viewContext->layoutName = null;
     $uri = UserControllerProfileModule::url($username);
     HttpHeadersHelper::setCurrentHeader('Location', $uri . '?referral=search');
 }
Example #10
0
 public function save($url, $renderFunction)
 {
     $path = $this->urlToPath($url);
     ob_start();
     $renderFunction();
     flush();
     $headers = HttpHeadersHelper::getCurrentHeaders();
     $contents = ob_get_contents();
     ob_end_clean();
     $handle = fopen($path, 'wb');
     flock($handle, LOCK_EX);
     fwrite($handle, serialize($headers));
     fwrite($handle, "\n\n");
     fwrite($handle, $contents);
     fclose($handle);
     echo $contents;
 }
 public static function work(&$controllerContext, &$viewContext)
 {
     $ratingDistribution = [];
     foreach (Media::getConstList() as $media) {
         $entries = $viewContext->user->getMixedUserMedia($media);
         $entriesNonPlanned = UserMediaFilter::doFilter($entries, [UserMEdiaFilter::nonPlanned()]);
         $ratingDistribution[$media] = RatingDistribution::fromEntries($entries);
     }
     //get input data from GET
     $userSettings = !empty($_GET['settings']) ? json_decode(base64_decode($_GET['settings']), true) : [];
     $imageType = !empty($userSettings[0]) ? $userSettings[0] : null;
     if (!in_array($imageType, [self::IMAGE_TYPE_ANIME, self::IMAGE_TYPE_MANGA, self::IMAGE_TYPE_ANIME_MANGA])) {
         $imageType = self::IMAGE_TYPE_ANIME;
     }
     $settings = new StdClass();
     $settings->font = Config::$mediaDirectory . DIRECTORY_SEPARATOR . 'font' . DIRECTORY_SEPARATOR . 'OpenSans-Regular.ttf';
     $settings->fontSizeSmall = 7;
     $settings->fontSizeNormal = 9;
     $settings->fontSizeBig = 10.5;
     $settings->barWidth = 220;
     $settings->barHeight = 13;
     $settings->barPadding = 1;
     $settings->colors = [self::COLOR_BARS1 => '00a4c0f4', self::COLOR_BARS2 => '0013459a', self::COLOR_BAR_GUIDES1 => 'eea4c0f4', self::COLOR_BAR_GUIDES2 => 'ee13459a', self::COLOR_BACKGROUND => 'ffffffff', self::COLOR_FONT_DARK => '00000000', self::COLOR_FONT_LIGHT => 'aa000000', self::COLOR_TITLE => '00577fc2', self::COLOR_LOGO => '00577fc2'];
     foreach (array_keys($settings->colors) as $key) {
         if (isset($userSettings[$key])) {
             $value = $userSettings[$key];
             assert(in_array(strlen($value), [6, 8]));
             $settings->colors[$key] = $value;
         }
     }
     $settings->colors = array_map(function ($color) {
         $value = array_map('hexdec', str_split($color, 2));
         if (count($value) == 3) {
             array_unshift($value, 0);
         }
         $value[0] >>= 1;
         $c = 0;
         while (!empty($value)) {
             $c <<= 8;
             $c |= array_shift($value);
         }
         return $c;
     }, $settings->colors);
     $margin = 6;
     $iconImage = self::getIconImage($settings);
     if ($imageType == self::IMAGE_TYPE_ANIME or $imageType == self::IMAGE_TYPE_MANGA) {
         $media = $imageType == self::IMAGE_TYPE_ANIME ? Media::Anime : Media::Manga;
         $barsImage = self::getBarsImage($settings, $ratingDistribution[$media], false);
         $barsAxesImage = self::getBarsAxesImage($settings, false);
         $barsBandsImage = self::getBarsBandsImage($settings, $ratingDistribution[$media], false);
         $footerImage = self::getFooterImage($settings, $ratingDistribution[$media], $media, false);
         $w = imagesx($barsImage) + imagesx($barsAxesImage) + imagesx($barsBandsImage);
         $h = imagesy($barsImage) + $margin + imagesy($footerImage);
         $img = imagecreatetruecolor($w, $h);
         imagealphablending($img, false);
         imagefilledrectangle($img, 0, 0, $w, $h, $settings->colors[self::COLOR_BACKGROUND]);
         $x = 0;
         $y = imagesy($barsAxesImage) + $margin;
         self::drawCopy($img, $barsAxesImage, $x, 0);
         $x += imagesx($barsAxesImage);
         self::drawCopy($img, $barsImage, $x, 0);
         self::drawCopy($img, $footerImage, $x, $y);
         $x += imagesx($barsImage);
         self::drawCopy($img, $barsBandsImage, $x, 0);
         $x += imagesx($barsBandsImage);
         $x = imagesx($barsAxesImage) - imagesx($iconImage) >> 1;
         self::drawCopy($img, $iconImage, $x, $y);
     } else {
         $barsImage1 = self::getBarsImage($settings, $ratingDistribution[Media::Anime], true);
         $barsImage2 = self::getBarsImage($settings, $ratingDistribution[Media::Manga], false);
         $barsAxesImage = self::getBarsAxesImage($settings, true);
         $barsBandsImage1 = self::getBarsBandsImage($settings, $ratingDistribution[Media::Anime], true);
         $barsBandsImage2 = self::getBarsBandsImage($settings, $ratingDistribution[Media::Manga], false);
         $footerImage1 = self::getFooterImage($settings, $ratingDistribution[Media::Anime], Media::Anime, true);
         $footerImage2 = self::getFooterImage($settings, $ratingDistribution[Media::Manga], Media::Manga, false);
         $w = imagesx($barsImage1) + imagesx($barsImage2) + imagesx($barsAxesImage) + imagesx($barsBandsImage1) + imagesx($barsBandsImage2);
         $h = imagesy($barsImage1) + $margin + imagesy($footerImage1);
         $img = imagecreatetruecolor($w, $h);
         imagealphablending($img, false);
         imagefilledrectangle($img, 0, 0, $w, $h, $settings->colors[self::COLOR_BACKGROUND]);
         $x = 0;
         $y = imagesy($barsAxesImage) + $margin;
         self::drawCopy($img, $barsBandsImage1, $x, 0);
         $x += imagesx($barsBandsImage1);
         self::drawCopy($img, $barsImage1, $x, 0);
         self::drawCopy($img, $footerImage1, $x, $y);
         $x += imagesx($barsImage1);
         self::drawCopy($img, $barsAxesImage, $x, 0);
         $x += imagesx($barsAxesImage);
         self::drawCopy($img, $barsImage2, $x, 0);
         self::drawCopy($img, $footerImage2, $x, $y);
         $x += imagesx($barsImage2);
         self::drawCopy($img, $barsBandsImage2, $x, 0);
         $x = imagesx($barsBandsImage1) + imagesx($barsImage1) + (imagesx($barsAxesImage) - imagesx($iconImage) >> 1);
         self::drawCopy($img, $iconImage, $x, $y);
     }
     imagesavealpha($img, true);
     $viewContext->layoutName = null;
     HttpHeadersHelper::setCurrentHeader('Cache-Control', 'no-cache, must-revalidate');
     HttpHeadersHelper::setCurrentHeader('Expires', 'Sat, 26 Jul 1997 05:00:00 GMT');
     imagepng($img);
 }
Example #12
0
            if ($controllerContext->cache->isFresh($url)) {
                $controllerContext->cache->load($url);
                flush();
            } else {
                $f = function () use($workingClassName, $controllerContext, $viewContext) {
                    $workingClassName::work($controllerContext, $viewContext);
                    View::render($viewContext);
                };
                if (!$controllerContext->cache->isBypassed()) {
                    $controllerContext->cache->save($url, $f);
                } else {
                    $f();
                }
            }
            $workingClassName::postWork($controllerContext, $viewContext);
            if (HttpHeadersHelper::getCurrentHeader('Content-Type') == 'text/html' || HttpHeadersHelper::getCurrentHeader('Content-Type') == 'text/html;charset=UTF-8') {
                printf('<!-- retrieved in %.05fs -->', microtime(true) - $viewContext->renderStart);
            }
            exit(0);
        }
        $viewContext->viewName = 'error-404';
        View::render($viewContext);
    } catch (Exception $e) {
        #log error information
        $logger->log($e);
        $viewContext->viewName = 'error';
        $viewContext->exception = $e;
        View::render($viewContext);
    }
    exit(1);
}
Example #13
0
            if ($controllerContext->cache->isFresh($url)) {
                $controllerContext->cache->load($url);
                flush();
            } else {
                $f = function () use($workingClassName, $controllerContext, $viewContext) {
                    $workingClassName::work($controllerContext, $viewContext);
                    View::render($viewContext);
                };
                if (!$controllerContext->cache->isBypassed()) {
                    $controllerContext->cache->save($url, $f);
                } else {
                    $f();
                }
            }
            $workingClassName::postWork($controllerContext, $viewContext);
            if (HttpHeadersHelper::getCurrentHeader('Content-Type') == 'text/html') {
                printf('<!-- retrieved in %.05fs -->', microtime(true) - $viewContext->renderStart);
            }
            exit(0);
        }
        $viewContext->viewName = 'error-404';
        View::render($viewContext);
    } catch (Exception $e) {
        #log error information
        $logger->log($e);
        $viewContext->viewName = 'error';
        $viewContext->exception = $e;
        View::render($viewContext);
    }
    exit(1);
}