forked from HPR/hpr_hub
		
	
		
			
				
	
	
		
			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'; 
 | |
| ?>
 |