diff --git a/public_html/classes/conference.php b/public_html/classes/conference.php index a945533..269292d 100644 --- a/public_html/classes/conference.php +++ b/public_html/classes/conference.php @@ -18,8 +18,34 @@ class Conference { $this->queries = include('queries.php'); } + + // search/list specific conference + public function conferenceById($conference_id, $from_time, $until_time) { + + // time period drill-down + // FIXME make it similar to the bash version + if (empty($from_time)) { + $from_time = '0000-01-01'; + } + if (empty($until_time)) { + $until_time = '9999-12-31'; + } + + // this is needed for compatibility with the bash version, so we use '%s' placeholders + $from_time = htmlspecialchars(strip_tags($from_time)); + $until_time = htmlspecialchars(strip_tags($until_time)); + $sql = $this->queries['conference_by_id']; + $sql = sprintf($sql, $conference_id, $from_time, $until_time, $conference_id, $from_time, $until_time); + + $query = $this->db->prepare($sql); + $query->execute(); + + return $query->fetchAll(PDO::FETCH_ASSOC); + } + + // list of all conferences - public function conferencesAllFormatted($from_time,$until_time) { + public function conferencesAllFormatted($from_time, $until_time) { // time period drill-down // FIXME make it similar to the bash version @@ -42,6 +68,7 @@ class Conference { return $query->fetchAll(PDO::FETCH_ASSOC); } + } ?> diff --git a/public_html/index.php b/public_html/index.php index ce1c7ec..80f8807 100644 --- a/public_html/index.php +++ b/public_html/index.php @@ -36,6 +36,8 @@ if (file_exists($config_file)) { die('Config file not found'); } +$app_root = $config['folder']; + session_start(); if (isset($_GET['page'])) { diff --git a/public_html/pages/conferences.php b/public_html/pages/conferences.php index 14baec4..5f4121e 100644 --- a/public_html/pages/conferences.php +++ b/public_html/pages/conferences.php @@ -7,6 +7,23 @@ require 'classes/conference.php'; $from_time = '0000-01-01'; $until_time = '9999-12-31'; +// FIXME move thi sto a special function +$time_range_specified = true; + +// conference id/name are specified when searching specific conference(s) +// either id or name, id has precedence +// we use $_REQUEST, so that both links and forms work +if (isset($_REQUEST['id'])) { + $conference_id = $_REQUEST['id']; + unset($conference_name); +} elseif (isset($_REQUEST['name'])) { + unset($conference_id); + $conference_name = $_REQUEST['name']; +} else { + unset($conference_id); + unset($conference_name); +} + // connect to database try { $db = new Database($config['jilo_database']); @@ -16,66 +33,161 @@ try { exit(); } -// list of all conferences -try { - $conference = new Conference($db); - $search = $conference->conferencesAllFormatted($from_time,$until_time); - if (!empty($search)) { - $conferences = array(); - $conferences['records'] = array(); +// +// Conference listings +// - foreach ($search as $item) { - extract($item); - $conference_record = array( - // assign title to the field in the array record - 'jitsi_component' => $jitsi_component, - 'start' => $start, - 'end' => $end, - 'conference_id' => $conference_id, - 'conference_name' => $conference_name, - 'participants' => $participants, - 'name_count' => $name_count, - 'conference_host' => $conference_host - ); - // populate the result array - array_push($conferences['records'], $conference_record); + +// search and list specific conference ID +if (isset($conference_id)) { + + try { + $conference = new Conference($db); + + // prepare the result + $search = $conference->conferenceById($conference_id, $from_time, $until_time); + + if (!empty($search)) { + $conferences = array(); + $conferences['records'] = array(); + + foreach ($search as $item) { + extract($item); + $conference_record = array( + // assign title to the field in the array record + 'time' => $time, + 'conference ID' => $conference_id, + 'conference name' => $conference_name, + 'conference host' => $conference_host, + 'loglevel' => $loglevel, + 'participant ID' => $participant_id, + 'event' => $event_type, + 'parameter' => $event_param + ); + // populate the result array + array_push($conferences['records'], $conference_record); + } } + + } catch (Exception $e) { + $error = 'Error: ' . $e->getMessage(); + include 'templates/message.php'; + exit(); } -} catch (Exception $e) { - $error = 'Error: ' . $e->getMessage(); - include 'templates/message.php'; - exit(); -} - -echo "Conferences for the time period $from_time - $until_time"; - -if (!empty($conferences['records'])) { - - echo "\t"; - echo "\t\t"; - - // table headers - foreach (array_keys($conferences['records'][0]) as $header) { - echo "\t\t\t"; + // display the result + echo "Conferences with ID matching \"$conference_id\""; + if ($time_range_specified) { + echo " for the time period $from_time - $until_time"; } - echo "\t\t"; - //table rows - foreach ($conferences['records'] as $row) { + if (!empty($conferences['records'])) { + + echo "\t
" . htmlspecialchars($header) . "
"; echo "\t\t"; - foreach ($row as $column) { - // sometimes $column is empty, we make it '' then - echo "\t\t\t"; + + // table headers + foreach (array_keys($conferences['records'][0]) as $header) { + echo "\t\t\t"; } echo "\t\t"; + + //table rows + foreach ($conferences['records'] as $row) { + echo "\t\t"; + // sometimes $column is empty, we make it '' then + foreach ($row as $key => $column) { + if ($column === $conference_id) { + echo "\t\t\t"; + } elseif ($key === 'conference name') { + echo "\t\t\t"; + } else { + echo "\t\t\t"; + } + } + echo "\t\t"; + } + + echo "\t
" . htmlspecialchars($column ?? '') . "" . htmlspecialchars($header) . "
" . htmlspecialchars($column ?? '') . "" . htmlspecialchars($column ?? '') . "" . htmlspecialchars($column ?? '') . "
"; + + } else { + echo '

No matching conferences found.

'; } - echo "\t"; +// list of all conferences } else { - echo '

No matching conferences found.

'; + try { + $conference = new Conference($db); + + // prepare the result + $search = $conference->conferencesAllFormatted($from_time, $until_time); + + if (!empty($search)) { + $conferences = array(); + $conferences['records'] = array(); + + foreach ($search as $item) { + extract($item); + $conference_record = array( + // assign title to the field in the array record + 'component' => $jitsi_component, + 'start' => $start, + 'end' => $end, + 'conference ID' => $conference_id, + 'conference name' => $conference_name, + 'participants' => $participants, + 'name count' => $name_count, + 'conference host' => $conference_host + ); + // populate the result array + array_push($conferences['records'], $conference_record); + } + } + + } catch (Exception $e) { + $error = 'Error: ' . $e->getMessage(); + include 'templates/message.php'; + exit(); + } + + // display the result + echo "Conferences for the time period $from_time - $until_time"; + + if (!empty($conferences['records'])) { + + echo "\t"; + echo "\t\t"; + + // table headers + foreach (array_keys($conferences['records'][0]) as $header) { + echo "\t\t\t"; + } + echo "\t\t"; + + //table rows + foreach ($conferences['records'] as $row) { + echo "\t\t"; + // sometimes $column is empty, we make it '' then + foreach ($row as $key => $column) { + if ($key === 'conference ID') { + echo "\t\t\t"; + } elseif ($key === 'conference name') { + echo "\t\t\t"; + } else { + echo "\t\t\t"; + } + } + echo "\t\t"; + } + + echo "\t
" . htmlspecialchars($header) . "
" . htmlspecialchars($column ?? '') . "" . htmlspecialchars($column ?? '') . "" . htmlspecialchars($column ?? '') . "
"; + + } else { + echo '

No matching conferences found.

'; + } + } ?> diff --git a/public_html/static/all.css b/public_html/static/all.css index efac42a..6975988 100644 --- a/public_html/static/all.css +++ b/public_html/static/all.css @@ -82,6 +82,7 @@ width: 100%; border-collapse: collapse; margin: 20px 0; + padding-bottom: 30px; } #results table, th, td { border: 1px solid #ddd;