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; }
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; }