Example #1
0
function getnavlinks($path, $page)
{
    $pages = array('first' => NULL, 'prev' => NULL, 'next' => NULL, 'nlast' => NULL, 'last' => NULL);
    if (is_string($page) !== TRUE) {
        $page = '';
    }
    $page = strcountingcasebits($page);
    if (!is_dir($path)) {
        return $pages;
    }
    $handle = opendir($path);
    if ($handle === FALSE) {
        return $pages;
    }
    while (FALSE !== ($entry = readdir($handle))) {
        if (!is_file($path . '/' . $entry)) {
            continue;
        }
        $filename = strcountingcasebits(pathinfo($entry, PATHINFO_FILENAME));
        if ($pages['first'] === NULL || strcountingcasecmpraw($filename, $pages['first']) < 0) {
            $pages['first'] = $filename;
        }
        if ($pages['last'] === NULL || strcountingcasecmpraw($filename, $pages['last']) > 0) {
            $pages['nlast'] = $pages['last'];
            $pages['last'] = $filename;
        }
        switch (strcountingcasecmpraw($filename, $page)) {
            case 1:
                if ($pages['next'] === NULL || strcountingcasecmpraw($filename, $pages['next']) < 0) {
                    $pages['next'] = $filename;
                }
                break;
            case -1:
                if ($pages['prev'] === NULL || strcountingcasecmpraw($filename, $pages['prev']) > 0) {
                    $pages['prev'] = $filename;
                }
                break;
        }
    }
    return $pages;
}
Example #2
0
function pre_process($result)
{
    $pages = NULL;
    if (empty($result['story'])) {
        $result['story'] = 'default';
    }
    $metadata = array();
    if (file_exists('comics/' . $result['story'] . '/metadata.ini')) {
        $metadata = parse_ini_file('comics/' . $result['story'] . '/metadata.ini');
    }
    if (empty($metadata['name'])) {
        $metadata['name'] = ucwords($result['story']) . ' Comic';
    }
    // Possible scenarios:
    //
    // 1) Valid $result['page'] provided.
    //	Might need: First/Prev/Next/Last, single scan w/ comparisons
    // 2) None provided.
    //	Might need: First/Prev/Last, single scan w/ comparisons
    //	Page = Last
    //	Prev = Last - 1
    $prev = NULL;
    $next = NULL;
    if (empty($result['page']) && !empty($metadata['last'])) {
        $result['page'] = $metadata['last'];
    }
    // Check for image file and 404 if there isn't one...
    $result['image_file'] = globsingle('comics/' . $result['story'] . '/pages/' . $result['page'] . '.*');
    if ($result['image_file'] == null) {
        output_error(404, $result);
        return $result;
    }
    if (!empty($result['page'])) {
        $prev = checkexplicitpagenav('comics/' . $result['story'] . '/prev/' . $result['page']);
        $next = checkexplicitpagenav('comics/' . $result['story'] . '/next/' . $result['page']);
        if ($prev === NULL || $next === NULL) {
            $pagebits = strcountingcasebits($result['page']);
            if (!empty($pagebits['number'])) {
                $digits = strlen($pagebits['number']);
                if ($prev === NULL) {
                    $prev = -1 + (int) $pagebits['number'];
                    if ($prev < 1) {
                        $prev = NULL;
                    } else {
                        $prev = str_pad($prev, $digits, '0', STR_PAD_LEFT);
                    }
                    if (empty(globsingle('comics/' . $result['story'] . '/pages/' . $pagebits['prefix'] . $prev . '.*'))) {
                        $prev = NULL;
                    }
                }
                if ($next === NULL) {
                    $next = str_pad(1 + (int) $pagebits['number'], $digits, '0', STR_PAD_LEFT);
                    if (empty(globsingle('comics/' . $result['story'] . '/pages/' . $pagebits['prefix'] . $next . '.*'))) {
                        $next = NULL;
                    }
                }
            }
        }
        if ($prev !== NULL) {
            $metadata['prev'] = $prev;
        }
        if ($next !== NULL) {
            $metadata['next'] = $next;
        }
    }
    if (empty($metadata['first']) || empty($metadata['last']) || empty($metadata['prev']) || empty($metadata['next']) || empty($result['page'])) {
        if (empty($result['page'])) {
            $pages = getnavlinks('comics/' . $result['story'] . '/pages/*', NULL);
            if (!empty($pages['nlast'])) {
                $pages['prev'] = $pages['nlast'];
            }
            if (!empty($pages['last'])) {
                $result['page'] = $pages['last'];
            }
        } else {
            $pages = getnavlinks('comics/' . $result['story'] . '/pages/*', $result['page']);
        }
        foreach (array('first', 'prev', 'next', 'last') as $item) {
            if (empty($metadata[$item]) && $pages[$item] !== NULL) {
                $metadata[$item] = $pages[$item];
            }
        }
    }
    if (empty($result['page'])) {
        $result['page'] = '1';
    }
    foreach ($metadata as $k => $v) {
        $result['metadata_' . $k] = $v;
    }
    // Global variable because we can't make it a constant
    global $pageLinks;
    $result['directory'] = 'archive/' . ($result['story'] === 'default' ? '' : $result['story'] . '/');
    $pageLinks = array();
    foreach (array('first', 'prev', 'next', 'last') as $index) {
        if (isset($result['metadata_' . $index])) {
            $pageLinks[$index] = $result['metadata_' . $index];
        } else {
            $pageLinks[$index] = $result['page'];
        }
    }
    $result['template'] = "comic_default.php";
    if (!empty($result['image_file'])) {
        $template = "comic_" . pathinfo($result['image_file'], PATHINFO_EXTENSION) . ".php";
        if (file_exists($template)) {
            $result['template'] = $template;
        }
    }
    $commentary = globsingle('comics/' . $result['story'] . '/commentary/' . $result['page'] . '.*');
    if (!empty($commentary)) {
        $result['text_file'] = $commentary;
    }
    $result['page_title'] = $metadata['name'] . ' - Page ' . $result['page'];
    return $result;
}