<?php require "/home/hpr/php/include.php"; $pos = strpos($_SERVER['REQUEST_URI'], '?'); if ( ! $pos === false) { header("Status: 412 Precondition Failed"); include '412.shtml'; file_put_contents($naughtyfile, getUserIP(), FILE_APPEND | LOCK_EX ); exit; } $body="give"; //$body="index_full"; include 'header.html'; // -------------------------------------------- // Clean up stale reservations $ip = $_SERVER["REMOTE_ADDR"]; # Remove any stale requests. # This should be enough to deter attackers while been short enough to allow real hosts to request a show. $query_delete_old = "DELETE FROM reservations WHERE reservations.timestamp + INTERVAL 1 HOUR <= UTC_TIMESTAMP() AND reservations.status = 'REQUEST_UNVERIFIED'"; $result_delete_old = @mysqli_query($connection, $query_delete_old); logextra( "Deleting requests older than 1 hour" . $result_delete_old ); # Remove stale requests from this IP Address after 15 minutes. # This should be enough to deter attackers while been short enough to allow real hosts to request a show. $query_delete = "DELETE FROM reservations WHERE reservations.ip = '$ip' AND reservations.timestamp + INTERVAL 15 MINUTE <= UTC_TIMESTAMP() AND reservations.status = 'REQUEST_UNVERIFIED'"; $result_delete = @mysqli_query($connection, $query_delete); logextra( "Remove stale requests from this \"${ip}\" IP Address after 15 minutes. " . $result_delete_old ); // -------------------------------------------- // Get first free slot $query = mysqli_query($connection, " SELECT id + 1 FROM eps mo WHERE NOT EXISTS ( SELECT NULL FROM eps mi WHERE mi.id = mo.id + 1 ) ORDER BY id LIMIT 1"); $next_show_num_array = mysqli_fetch_row($query); $next_show_num = $next_show_num_array[0]; print "<!-- next_show_num is $next_show_num -->\n"; // -------------------------------------------- // Get latest published show $query = mysqli_query($connection, "SELECT max(date), max(id) from eps WHERE eps.date <= UTC_DATE()"); $current_episode_array = mysqli_fetch_row($query); $current_episode_date = $current_episode_array[0]; $current_episode_number = $current_episode_array[1]; print "<!-- current_episode_date is $current_episode_date -->\n"; print "<!-- current_episode_number is $current_episode_number -->\n"; // -------------------------------------------- // Get highest scheduled or reserved show $query = mysqli_query($connection, "SELECT MAX(id) FROM eps as maxid;"); $max_episode_array = mysqli_fetch_row($query); $max_episode_number = $max_episode_array[0]; print "<!-- max_episode_number is $max_episode_number -->\n"; // -------------------------------------------- // Populate array with future shows and reservations $show_array = array (); // REQUEST_UNVERIFIED → SHOW_SUBMITTED → METADATA_PROCESSED → SHOW_POSTED → MEDIA_TRANSCODED → UPLOADED_TO_IA → UPLOADED_TO_RSYNC_NET $ep_retrieve = "SELECT hosts.host, eps.id, eps.title, eps.date FROM eps, hosts WHERE eps.valid=1 AND eps.hostid = hosts.hostid AND eps.date >= '$current_episode_date' ORDER BY date DESC"; $ep_retrieve = "SELECT hosts.host, eps.id, eps.title, eps.date, COUNT( assets.extension) AS numfiles FROM eps LEFT JOIN hosts ON eps.hostid = hosts.hostid LEFT JOIN assets ON eps.id = assets.episode_id WHERE eps.valid = 1 AND eps.date >= '$current_episode_date' GROUP BY eps.id;"; if ($result = mysqli_query($connection, $ep_retrieve)) { while ($row = mysqli_fetch_array($result)) { $id = $row['id']; $date = $row['date']; $title = $row['title']; $host = $row['host']; $numfiles = $row['numfiles']; if( isset($numfiles) and $numfiles >= 3 ) { $status = "Finished"; } else { $status = "Reserved"; } $show_array[$id] = array ( "date" => date('Y-m-d', strtotime($date) ), "title" => $title, "host" => $host, "status" => $status ); } } // REQUEST_UNVERIFIED → SHOW_SUBMITTED → METADATA_PROCESSED → SHOW_POSTED → MEDIA_TRANSCODED → UPLOADED_TO_IA → UPLOADED_TO_RSYNC_NET // Populate array with currently processing shows EMAIL_LINK_CLICKED $ep_retrieve = " SELECT reservations.ep_num, reservations.ep_date, reservations.status FROM reservations WHERE reservations.verified = 1 AND reservations.ep_date >= '$current_episode_date' ORDER BY reservations.ep_date DESC"; if ($result = mysqli_query($connection, $ep_retrieve)) { while ($row = mysqli_fetch_array($result)) { $id = $row['ep_num']; $date = $row['ep_date']; $status = $row['status']; $show_array[$id] = array ( "date" => date('Y-m-d', strtotime($date) ), "title" => $status, "host" => "Unverified", "status" => "Processing" ); } } // Populate array with temporary reservations. $ep_retrieve = "SELECT r.ep_num, r.ep_date, r.timestamp + INTERVAL 1 HOUR - UTC_TIMESTAMP() AS seconds_to_expiration FROM reservations r WHERE r.timestamp + INTERVAL 1 HOUR > UTC_TIMESTAMP() AND r.verified =0 AND r.ep_date >= '$current_episode_date' ORDER BY r.ep_date DESC"; if ($result = mysqli_query($connection, $ep_retrieve)) { while ($row = mysqli_fetch_array($result)) { $id = $row['ep_num']; $date = $row['ep_date']; $seconds_to_expiration = $row['seconds_to_expiration']; $minutes = floor($seconds_to_expiration / 60) + 1; $show_array[$id] = array ( "date" => date('Y-m-d', strtotime($date) ), "title" => " Available again in $minutes minutes", "host" => "Unverified", "status" => "Locked" ); } } $ep_retrieve = "SELECT hosts.host, eps.id, eps.title, eps.date FROM eps, hosts, assets WHERE eps.valid = 1 AND eps.hostid = hosts.hostid AND eps.id = assets.episode_id AND assets.extension = 'ogg' AND eps.date >= '$current_episode_date' ORDER BY date DESC"; if ($result = mysqli_query($connection, $ep_retrieve)) { while ($row = mysqli_fetch_array($result)) { $id = $row['id']; $date = $row['date']; $title = $row['title']; $host = $row['host']; $show_array[$id] = array ( "date" => date('Y-m-d', strtotime($date) ), "title" => $title, "host" => $host, "status" => "Finished" ); } } // -------------------------------------------- // Calculate the time to the next show # aria-label="" $next_show_date = date('Y-m-d', strtotime($show_array[$next_show_num - 1 ]["date"] . ' + 1 weekday')); $days_to_wait = floor((strtotime($next_show_date) - strtotime(gmdate('Y-m-d')))/(60*60*24)); ?> <main id="maincontent"> <h1>Upload Your Show</h1> <p> The HPR Schedule is entirely community driven and we recommend that <strong>you</strong> decide when your show will be released. </p> <p> There are only <strong><?php echo "${days_to_wait}"; ?></strong> days to wait until next free slot. Please consider <a aria-label="Help on Recording a podcast" href="<?php echo "${baseurl}about.html#recording_a_podcast"; ?>">recording</a> a show for us. </p> <ol> <li>Review the updated <em><a aria-label="Learn the Stuff you need to know" href="<?php echo "${baseurl}about.html#agreement"; ?>">Stuff you need to know</a></em> page.</li> <li>Select a date, or post to the reserve queue.</li> <li>Click the link in the confirmation email</li> <li>Then <a aria-label="Help on Adding an episode" href="<?php echo "${baseurl}about.html#adding_an_episode"; ?>">fill in a form</a>.</li> </ol> <h2 id="reserve_queue">Add to the Reserve Queue ?</h2> <p> <a aria-label="Post to the reserve queue" href="<?php echo "${hubBaseurl}"; ?>request.php?id=9999">Post your show to the <strong>reserve queue</strong></a> if you don't care when it will be released. <small><a aria-label="Help on the reserve queue" href="<?php echo "${baseurl}about.html#reserve_queue"; ?>">ⓘ</a></small> </p> <h2 id="current_schedule">Select a date in the current schedule ?</h2> <p> <strong>Schedule</strong> the release</a> day your show will be aired. <small><a aria-label="Help on the scheduling guidelines" href="<?php echo "${baseurl}about.html#scheduling_guidelines"; ?>">ⓘ</a></small> </p> <h3>Next Two Months <small><a aria-label="Help on the HPR processing workflow" href="<?php echo "${baseurl}about.html#workflow"; ?>">ⓘ</a></small></h3> <?php $sizeof_show_array = sizeof($show_array); $this_episode_date = date('D Y-m-d', strtotime($current_episode_date)); $week_number = date('W', strtotime($this_episode_date)); for ( $slot = $current_episode_number; $slot < ( $current_episode_number + 60 ); $slot++ ) { if ( !empty( $show_array[$slot] ) ) { if ( $show_array[$slot]["status"] === "Finished" ) { # https://hackerpublicradio.org/eps/hpr3879/index.html # ${baseurl}/eps/hpr${slot}/index.html echo "<span style=\"font-family:monospace;\">" . date('D Y-m-d', strtotime($show_array[$slot]["date"])) . ": <a aria-label=\"Go directly to the show hpr${slot}\" href=\"${baseurl}eps/hpr${slot}/index.html\">hpr${slot}</a></span> <strong>" . $show_array[$slot]["title"] . "</strong> by <em>" . $show_array[$slot]["host"] . "</em><br />\n"; } else { echo "<span style=\"font-family:monospace;\">${this_episode_date}: hpr${slot}</span> <strong>". $show_array[$slot]["status"]. ":</strong> <em>" . $show_array[$slot]["title"] . "</em>.<br />\n"; } $sizeof_show_array--; } elseif ( empty( $show_array[$slot] ) ) { echo "<span style=\"font-family:monospace;\">${this_episode_date}: <a aria-label=\"Upload to the slot hpr${slot}\" href=\"/request.php?id=${slot}\">hpr${slot}</span> is available - upload now</a>.<br />\n"; } elseif ( $show_array[$slot]["valid"] == 0 ) { echo "<span style=\"font-family:monospace;\">${this_episode_date}: hpr${slot}</span> <strong>Unavailable</strong>.<br />\n"; } $this_episode_date = date('D Y-m-d', strtotime($this_episode_date . ' + 1 weekday')); $new_week_number = date('W', strtotime($this_episode_date)); if ( $week_number != $new_week_number ) { $week_number = $new_week_number; echo "<span style=\"font-family:monospace;\">----------------- Week ${week_number} -----------------<br /></span>\n"; } } ?> <h3>Also Scheduled</h3> <?php $slot--; while ( $slot <= $max_episode_number) { // print "<!-- slot $slot, sizeof_show_array $sizeof_show_array, sizeof_reservation_array $sizeof_reservation_array, max_episode_number $max_episode_number -->\n" ; if ( !empty( $show_array[$slot] ) ) { if ( $show_array[$slot]["status"] === "Finished" ) { echo "<span style=\"font-family:monospace;\">" . date('D Y-m-d', strtotime($show_array[$slot]["date"])) . ": <a aria-label=\"Go directly to the show hpr${slot}\" href=\"${baseurl}eps/hpr${slot}/index.html\">hpr${slot}</a></span> <strong>" . $show_array[$slot]["title"] . "</strong> by <em>" . $show_array[$slot]["host"] . "</em><br />\n"; } else { echo "<span style=\"font-family:monospace;\">" . date('D Y-m-d', strtotime($show_array[$slot]["date"])) . ": hpr${slot}</span> <strong>". $show_array[$slot]["status"]. ":</strong> <em>" . $show_array[$slot]["title"] . "</em>.<br />\n"; } $sizeof_show_array--; } $slot++; } ?> <h3>Pick other dates</h3> <p> If you wish to pick an available slot in the next 12 months then go directly to the <a aria-label="Go to the request page" href="/request.php">request page</a>. </p> </main> <?php include 'footer.html'; ?>