function show_entries($offset = NULL, $maxcount = NULL, $showNavigaion = TRUE, $showCheckboxes = FALSE, $showadminfields = FALSE, $approvedOnly = TRUE) { global $MAX_ENTRIES_PER_PAGE; global $DISPLAY_TIME_ZONE; if ($showadminfields === TRUE) { $approvedOnly = FALSE; } // Set the display time zone, if applicable if (!empty($DISPLAY_TIME_ZONE)) { if (function_exists("date_default_timezone_set")) { @date_default_timezone_set($DISPLAY_TIME_ZONE); } else { putenv("TZ=" . $DISPLAY_TIME_ZONE); } } // Validate and initialize record offset if (!isset($offset) && isset($_REQUEST['offset'])) { $offset = $_REQUEST['offset']; if (!is_numeric($offset) || $offset < 0) { die("Invalid offset."); } } else { $offset = 0; } if (!isset($maxcount)) { $maxcount = $MAX_ENTRIES_PER_PAGE; } // If navigation page numbers are being used, we need // the count of total entries global $SHOW_PAGE_NUMBER_NAVIGATION; if ($SHOW_PAGE_NUMBER_NAVIGATION === TRUE) { $totalEntries = get_guestbook_entries_count($approvedOnly); } else { $totalEntries = -1; } $guestbookExists = guestbook_open_for_read() !== FALSE; $count = 0; if ($guestbookExists) { if ($offset > 0) { guestbook_forward($offset); } while ($count < $maxcount && ($entry = guestbook_next()) !== FALSE) { // Skip entries that are pending approval if (!$entry['approved'] && $approvedOnly) { continue; } // Determine element ID $elementId = NULL; if ($count === 0) { if ($maxcount === 1) { $elementId = "onlyEntry"; } else { $elementId = "firstEntry"; } } else { if ($count === $maxcount - 1) { $elementId = "lastEntry"; } } show_entry($entry, $count + $offset, $showCheckboxes, $showadminfields, $elementId); $count += 1; } } if ($showNavigaion) { $showMaxCountInPrevNext = !$SHOW_PAGE_NUMBER_NAVIGATION; $showPrevious = $offset > 0; $showNext = $guestbookExists && guestbook_next() !== FALSE; echo "<div class=\"navigation\">\n"; global $GUESTBOOK_URL_PATH; if ($showPrevious) { global $PREVIOUS_TEXT; $previous_offset = $offset - $MAX_ENTRIES_PER_PAGE; if ($previous_offset < 0) { $previous_offset = 0; } echo "<a href=\"" . urlencode($GUESTBOOK_URL_PATH) . "?offset={$previous_offset}\" id=\"previous\">" . htmlspecialchars_default($PREVIOUS_TEXT) . ($showMaxCountInPrevNext ? " " . htmlspecialchars_default($maxcount) : "") . "</a>\n"; } if ($SHOW_PAGE_NUMBER_NAVIGATION === TRUE && $totalEntries > $MAX_ENTRIES_PER_PAGE) { global $NAVIGATION_MAX_PAGE_NUMBERS; echo "<div class=\"pageNumberContainer\">"; // Show page numbers $pageNumberOffset = $offset - ($NAVIGATION_MAX_PAGE_NUMBERS - 1) * $MAX_ENTRIES_PER_PAGE; if ($pageNumberOffset < 0) { $pageNumberOffset = 0; } for ($pageNumberCount = 0; $pageNumberOffset < $totalEntries && $pageNumberCount < $NAVIGATION_MAX_PAGE_NUMBERS; $pageNumberCount++) { $pageNumberDisplay = $pageNumberOffset / $MAX_ENTRIES_PER_PAGE + 1; if ($pageNumberOffset != $offset) { echo "<a href=\"" . urlencode($GUESTBOOK_URL_PATH) . "?offset=" . htmlspecialchars_default($pageNumberOffset) . "\" class=\"pageNumber\">" . htmlspecialchars_default($pageNumberDisplay) . "</a>\n"; } else { echo "<span class=\"pageNumber\" id=\"currentPageNumber\">" . htmlspecialchars_default($pageNumberDisplay) . "</span>\n"; } $pageNumberOffset += $MAX_ENTRIES_PER_PAGE; } echo "</div>"; } else { if ($showPrevious && $showNext) { echo " - "; } } if ($showNext) { global $NEXT_TEXT; $next_offset = $offset + $MAX_ENTRIES_PER_PAGE; echo "<a href=\"" . urlencode($GUESTBOOK_URL_PATH) . "?offset={$next_offset}\" id=\"next\">" . htmlspecialchars_default($NEXT_TEXT) . ($showMaxCountInPrevNext ? " " . htmlspecialchars_default($maxcount) : "") . "</a>\n"; } echo "</div>\n"; } if ($guestbookExists) { guestbook_close(); } }
function set_guestbook_entries_count() { global $guestbook_approved_entries_count; global $guestbook_total_entries_count; $guestbook_approved_entries_count = 0; $guestbook_total_entries_count = 0; // Get raw data from file if (guestbook_open_for_read() === FALSE) { // Acquires shared lock on guestbook file return 0; } $raw_entries = @file(guestbook_file_path()); guestbook_close(); // Releases shared lock if ($raw_entries === FALSE) { return 0; } // Split entries into components $entries = array_map('entry_explode', $raw_entries); // Count entries $approvedCount = 0; $totalCount = 0; foreach ($entries as $entry) { if (!isset($entry[7]) || $entry[7] === 'true') { $approvedCount++; } // Approved entries count $totalCount++; // Total entries count } // Open/create summary file $summary_fp = @fopen(guestbook_summary_file_path(), "w"); if ($summary_fp === FALSE) { die("Unable to open summary file for writing"); } @flock($summary_fp, LOCK_EX); fputs($summary_fp, $approvedCount . "\n"); fputs($summary_fp, $totalCount . "\n"); @flock($summary_fp, LOCK_UN); fclose($summary_fp); // Update cached count $guestbook_approved_entries_count = $approvedCount; $guestbook_total_entries_count = $totalCount; }