302 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			302 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|  | <?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';  | ||
|  | ?>
 |