Initial commit
This commit is contained in:
commit
85fdecf8f2
|
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"name": "6 - dir",
|
||||||
|
"host": "192.168.1.6",
|
||||||
|
"protocol": "sftp",
|
||||||
|
"port": 22,
|
||||||
|
"username": "phowell",
|
||||||
|
"remotePath": "/home/phowell/www/dir",
|
||||||
|
"uploadOnSave": true,
|
||||||
|
"useTempFile": false,
|
||||||
|
"openSsh": false
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
<?php
|
||||||
|
$MY_TITLE = "Events, Training, & Workshops";
|
||||||
|
$MY_CRUMB = "Activities";
|
||||||
|
$CONTENT = '<activitylist :static="0" :itineraryview="false" zoom_on="0" survey_on="0"></activitylist>';
|
||||||
|
include 'layout.php';
|
||||||
|
|
@ -0,0 +1,323 @@
|
||||||
|
<?php
|
||||||
|
include_once("peter_db.php");
|
||||||
|
$peter_db = new peter_db();
|
||||||
|
$c = $peter_db -> getConnection();
|
||||||
|
|
||||||
|
// Establish database connection
|
||||||
|
//$c = new mysqli($DBServer, $DBUser, $DBPass, $DBName);
|
||||||
|
|
||||||
|
//if ($c->connect_error) { die('Database connection failed: ' . $c->connect_error ); }
|
||||||
|
//if (!mysqli_select_db($c, $DBName)) { die("Uh oh, couldn't select database $DBName"); }
|
||||||
|
mysqli_set_charset($c, 'utf8');
|
||||||
|
|
||||||
|
$server = $_SERVER['SERVER_NAME'];
|
||||||
|
$DEBUG = 0;
|
||||||
|
function p($s) { echo "<p>{$s}</p>\n"; }
|
||||||
|
function p2($val){ echo '<pre>'; print_r($val); echo "</pre>\n"; }
|
||||||
|
function d_err($s) { global $DEBUG; if ($DEBUG) { p($s); } }
|
||||||
|
function ok($str) { global $c; return mysqli_real_escape_string($c, strip_tags($str, '<p><br><ul><ol><li><b><i><strong><em>')); }
|
||||||
|
function okh($str) { global $c; return mysqli_real_escape_string($c, $str); }
|
||||||
|
function sanitizeAndValidate($s) { return okh($s); }
|
||||||
|
function unescape_commas($s) { return preg_replace('/\[CMA\]/', ',', $s); }
|
||||||
|
|
||||||
|
function single_row_select($qry, $j=1) {
|
||||||
|
global $c;
|
||||||
|
$r = mysqli_query($c, $qry); d_err($qry);
|
||||||
|
$e = mysqli_error($c); if($e) { d_err("sql error: " . $e ); }
|
||||||
|
if (!$r) { return $r; }
|
||||||
|
$a = mysqli_fetch_assoc($r);
|
||||||
|
$e = mysqli_error($c); if($e) { d_err("sql error: " . $e ); }
|
||||||
|
if (! $j) { return $a; } return json_encode($a); }
|
||||||
|
|
||||||
|
function single_row_insert($qry) { global $c;
|
||||||
|
$r = mysqli_query($c, $qry);
|
||||||
|
return mysqli_insert_id($c); }
|
||||||
|
|
||||||
|
function single_row_update($qry, $j=1) { global $c;
|
||||||
|
$r = mysqli_query($c, $qry);
|
||||||
|
return 1; }
|
||||||
|
|
||||||
|
function multi_row_select($qry, $j=1) { global $c; $rows = array();
|
||||||
|
$result = mysqli_query($c, $qry);
|
||||||
|
while($r = mysqli_fetch_assoc($result)) { $rows[] = $r; }
|
||||||
|
if (! $j) { return $rows; } return json_encode( $rows); }
|
||||||
|
|
||||||
|
function multi_row_1d($qry) { global $c;
|
||||||
|
$savedQuery = mysqli_query($c, $qry);
|
||||||
|
while($savedResult = mysqli_fetch_array($savedQuery)) { $savedArray[] = $savedResult[0]; }
|
||||||
|
return $savedArray; }
|
||||||
|
|
||||||
|
|
||||||
|
// _____ _____ _ _ _____ _ ______ _ ____ _ _
|
||||||
|
// / ____|_ _| \ | |/ ____| | | ____| (_) / __ \| \ | |
|
||||||
|
// | (___ | | | \| | | __| | | |__ ___ _ __ _ _ __ | | | | \| |
|
||||||
|
// \___ \ | | | . ` | | |_ | | | __| / __| |/ _` | '_ \ | | | | . ` |
|
||||||
|
// ____) |_| |_| |\ | |__| | |____| |____ \__ \ | (_| | | | | | |__| | |\ |
|
||||||
|
// |_____/|_____|_| \_|\_____|______|______| |___/_|\__, |_| |_| \____/|_| \_|
|
||||||
|
// __/ |
|
||||||
|
// |___/
|
||||||
|
// SSO
|
||||||
|
//
|
||||||
|
// Set GLOBAL VARS corresponding to current logged in user.
|
||||||
|
// They may only edit their own dir info.
|
||||||
|
//
|
||||||
|
|
||||||
|
include('single_sign_on.php');
|
||||||
|
|
||||||
|
|
||||||
|
// Define URL templates and associated SQL queries
|
||||||
|
$queries = array(
|
||||||
|
'/users/{id}' => 'SELECT * FROM conf_users WHERE id = :id',
|
||||||
|
'/users' => 'SELECT * FROM conf_users',
|
||||||
|
'/sessions' => 'SELECT c.id,c.title,c.desc,c.length,c.starttime,c.track,c.location,c.location_irl,c.mode,c.gets_survey,c.category,c.parent,c.recording,c.instructions,c.image_url,c.is_flex_approved,c.cal_uid,sst.type AS typeStr, sst.id AS type, GROUP_CONCAT(ctg.tag) AS tags FROM conf_sessions c LEFT JOIN conf_sessiontypes sst ON c.type=sst.id LEFT JOIN conf_tagmember ct ON c.id=ct.session LEFT JOIN conf_tags ctg ON ctg.id=ct.tag GROUP BY c.id ORDER BY c.track, c.starttime;',
|
||||||
|
'/ses/{day}' => 'SELECT c.id,c.title,c.desc,c.length,c.starttime,c.track,c.location,c.location_irl,c.mode,c.gets_survey,c.category,c.parent,c.recording,c.image_url,c.is_flex_approved,c.cal_uid,sst.type AS typeStr, sst.id AS type, GROUP_CONCAT(ctg.tag) AS tags FROM conf_sessions c LEFT JOIN conf_sessiontypes sst ON c.type=sst.id LEFT JOIN conf_tagmember ct ON c.id=ct.session LEFT JOIN conf_tags ctg ON ctg.id=ct.tag WHERE c.starttime LIKE \'%:day%\' GROUP BY c.id ORDER BY c.track, c.starttime;',
|
||||||
|
'/settings' => 'SELECT * FROM conf_uinforecord;'
|
||||||
|
);
|
||||||
|
|
||||||
|
$functions = array(
|
||||||
|
'/app' => 'appdata',
|
||||||
|
'/start' => 'startup',
|
||||||
|
'/update/activity' => 'set_sessioninfo',
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
if (1) { //// ($_SERVER['REQUEST_METHOD'] === 'GET') {
|
||||||
|
|
||||||
|
if (isset($_REQUEST['query'])) {
|
||||||
|
$requestUrl = '/' . $_REQUEST['query']; /// $_SERVER['REQUEST_URI'];
|
||||||
|
|
||||||
|
// Check if a matching URL template exists
|
||||||
|
// Execute corresponding SQL query based on the request URL
|
||||||
|
foreach ($queries as $urlTemplate => $sqlTemplate) {
|
||||||
|
$pattern = preg_replace('/{([\-_\w]+)}/', '([\-_\w]+)', $urlTemplate);
|
||||||
|
|
||||||
|
if (preg_match("#^$pattern$#", $requestUrl, $matches)) {
|
||||||
|
// Extract parameter values
|
||||||
|
$params = array();
|
||||||
|
preg_match_all('/{([\-_\w]+)}/', $urlTemplate, $paramNames);
|
||||||
|
foreach ($paramNames[1] as $index => $paramName) {
|
||||||
|
$paramValue = $matches[$index + 1];
|
||||||
|
//echo ". . index:" . $index . ". . paramName:" . $paramName . ". . paramValue:" . $paramValue . "<br>";
|
||||||
|
|
||||||
|
// Sanitize and validate the parameter value
|
||||||
|
// Store the sanitized value in the $params array
|
||||||
|
$params[':' . $paramName] = sanitizeAndValidate($paramValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prepare the SQL query with the parameter values
|
||||||
|
$sql = strtr($sqlTemplate, $params);
|
||||||
|
// Execute the SQL query and retrieve data
|
||||||
|
//echo "query:" . $sql . "<br>";
|
||||||
|
|
||||||
|
$result = mysqli_query($c, $sql);
|
||||||
|
$rows = array();
|
||||||
|
while($r = mysqli_fetch_assoc($result)) { $rows[] = $r; }
|
||||||
|
$jsonString = json_encode($rows);
|
||||||
|
$sizeInBytes = strlen($jsonString);
|
||||||
|
|
||||||
|
echo json_encode(array(
|
||||||
|
"size" => $sizeInBytes,
|
||||||
|
"result" => "success",
|
||||||
|
//"query" => $sql,
|
||||||
|
"data" => $rows,
|
||||||
|
"err" => mysqli_error($c)
|
||||||
|
));
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($functions as $urlTemplate => $functionCall) {
|
||||||
|
$pattern = preg_replace('/{([\-_\w]+)}/', '([\-_\w]+)', $urlTemplate);
|
||||||
|
|
||||||
|
if (preg_match("#^$pattern$#", $requestUrl, $matches)) {
|
||||||
|
// Extract parameter values
|
||||||
|
$params = array();
|
||||||
|
preg_match_all('/{([\-_\w]+)}/', $urlTemplate, $paramNames);
|
||||||
|
foreach ($paramNames[1] as $index => $paramName) {
|
||||||
|
$paramValue = $matches[$index + 1];
|
||||||
|
// Sanitize and validate the parameter value
|
||||||
|
// Store the sanitized value in the $params array
|
||||||
|
$params[':' . $paramName] = sanitizeAndValidate($paramValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
$rows = call_user_func($functionCall);
|
||||||
|
$jsonString = json_encode($rows);
|
||||||
|
$sizeInBytes = strlen($jsonString);
|
||||||
|
|
||||||
|
echo json_encode(array(
|
||||||
|
"size" => $sizeInBytes,
|
||||||
|
"result" => "success",
|
||||||
|
"data" => $rows,
|
||||||
|
"err" => mysqli_error($c)
|
||||||
|
));
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} /*elseif ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||||
|
// Handle updates / inserts
|
||||||
|
$tableName = $_GET['table'];
|
||||||
|
$postData = $_POST;
|
||||||
|
$recordId = isset($postData['id']) ? $postData['id'] : null;
|
||||||
|
|
||||||
|
$date = date('Y-m-d H:i:s');
|
||||||
|
$columns = explode(',', $_REQUEST['cols']);
|
||||||
|
$values = explode(',', $_REQUEST['vals']);
|
||||||
|
$values = array_map('unescape_commas', $values);
|
||||||
|
$columnValuePairs = array_combine($columns, $values);
|
||||||
|
|
||||||
|
// Build the update/insert query
|
||||||
|
if ($recordId) {
|
||||||
|
$query = "UPDATE $tableName SET ";
|
||||||
|
$query .= join(", ", array_map(function ($column, $value) {
|
||||||
|
return okh($column) . " = '" . okh($value) . "'";
|
||||||
|
}, array_keys($columnValuePairs), $columnValuePairs));
|
||||||
|
$query .= ", changed = '$date'";
|
||||||
|
$query .= " WHERE id = $recordId";
|
||||||
|
} else {
|
||||||
|
$query = "INSERT INTO $tableName (";
|
||||||
|
$query .= join(", ", array_map('okh', $columns));
|
||||||
|
$query .= ", changed) VALUES ('";
|
||||||
|
$query .= join("', '", array_map('okh', $values));
|
||||||
|
$query .= "', '$date')";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Execute the query
|
||||||
|
echo "Query: " . $query . "<br>";
|
||||||
|
exit();
|
||||||
|
$r = mysqli_query($c, $query);
|
||||||
|
echo json_encode(array(
|
||||||
|
"rawvalstr" => $_REQUEST['vals'],
|
||||||
|
"result" => "success",
|
||||||
|
"action" => ($recordId ? "updated" : "inserted"),
|
||||||
|
"logaction" => $logaction,
|
||||||
|
"query" => $query,
|
||||||
|
"err" => mysqli_error($c)
|
||||||
|
));
|
||||||
|
exit();
|
||||||
|
|
||||||
|
|
||||||
|
} */
|
||||||
|
|
||||||
|
function startup() {
|
||||||
|
global $USER;
|
||||||
|
$ddd = multi_row_select('SELECT * FROM gavi_departments ORDER BY name',0);
|
||||||
|
$ttt = multi_row_select('SELECT * FROM gavi_titles ORDER BY name',0);
|
||||||
|
$rrr = multi_row_select("SELECT * FROM gavi_roles ORDER BY 'descr'",0);
|
||||||
|
$ccc = multi_row_select('SELECT * FROM gavi_committees ORDER BY name',0);
|
||||||
|
$sss = multi_row_select('SELECT * FROM conf_sessiontypes ORDER BY id',0);
|
||||||
|
$aya = multi_row_select('SELECT * FROM conf_academicyears ORDER BY id',0);
|
||||||
|
$set = multi_row_select('SELECT id,label,value FROM conf_uinforecord',0);
|
||||||
|
$ppp = multi_row_select("SELECT * FROM `conf_sessions` WHERE `type` = '20' OR `type` = '21' ORDER BY starttime",0);
|
||||||
|
|
||||||
|
$SET = array();
|
||||||
|
foreach ($set as $setting) {
|
||||||
|
$SET[$setting['label']] = $setting['value'];
|
||||||
|
}
|
||||||
|
echo json_encode( array( 'user'=>$USER, 'departments'=>$ddd, 'titles'=>$ttt, 'roles'=>$rrr, 'committees'=>$ccc,
|
||||||
|
'sessiontypes'=>$sss, 'settings'=>$SET, 'ay'=>$aya, 'parents'=>$ppp ) );
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
function appdata() {
|
||||||
|
global $USER;
|
||||||
|
|
||||||
|
// mysessions
|
||||||
|
$m = multi_row_select("SELECT c.id,c.title,c.desc,c.length,c.starttime,c.track,c.location,c.location_irl,c.mode,c.gets_survey,c.category,c.parent,c.recording,c.instructions,c.image_url,c.is_flex_approved,sst.type,sst.id AS typeId, GROUP_CONCAT(ctg.tag) AS tags FROM conf_sessions c LEFT JOIN conf_signups as sup on c.id=sup.session LEFT JOIN conf_hosts as h ON h.session=c.id JOIN conf_sessiontypes sst ON c.type=sst.id LEFT JOIN conf_tagmember ct ON c.id=ct.session LEFT JOIN conf_tags ctg ON ctg.id=ct.tag WHERE (h.host='{$USER['conf_id']}' OR sup.user='{$USER['conf_id']}') GROUP BY c.id ORDER BY c.track, c.starttime;",0);
|
||||||
|
|
||||||
|
// sessions
|
||||||
|
$s = multi_row_select('SELECT c.id,c.title,c.desc,c.length,c.starttime,c.track,c.location,c.location_irl,c.mode,c.gets_survey,c.category,c.parent,c.recording,c.instructions,c.image_url,c.is_flex_approved,c.cal_uid,sst.type AS typeStr, sst.id AS type, GROUP_CONCAT(ctg.tag) AS tags FROM conf_sessions c LEFT JOIN conf_sessiontypes sst ON c.type=sst.id LEFT JOIN conf_tagmember ct ON c.id=ct.session LEFT JOIN conf_tags ctg ON ctg.id=ct.tag GROUP BY c.id ORDER BY c.track, c.starttime;',0);
|
||||||
|
|
||||||
|
// hosts
|
||||||
|
$hh = multi_row_1d("select session FROM conf_hosts WHERE host='{$USER['conf_id']}';");
|
||||||
|
|
||||||
|
// conferences
|
||||||
|
$c = multi_row_select('SELECT * FROM conf_conferences;',0);
|
||||||
|
|
||||||
|
$y = multi_row_select('SELECT * FROM conf_academicyears',0);
|
||||||
|
|
||||||
|
// options
|
||||||
|
$o = multi_row_select('SELECT * FROM conf_uinforecord',0);
|
||||||
|
|
||||||
|
echo json_encode(array(
|
||||||
|
"mysessions" => $m,
|
||||||
|
"sessions" => $s,
|
||||||
|
"host" => $hh,
|
||||||
|
"user" => $USER,
|
||||||
|
"conference" => $c,
|
||||||
|
"ay" => $y,
|
||||||
|
"options" => $o,
|
||||||
|
));
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
|
||||||
|
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
|
||||||
|
//
|
||||||
|
// Editing of session info
|
||||||
|
//
|
||||||
|
function reducer ($memo, $a) { return $memo . "`" . ok($a[0]) . "` = '" . okh($a[1]) . "', "; }
|
||||||
|
|
||||||
|
function set_sessioninfo() {
|
||||||
|
global $c, $USER;
|
||||||
|
$table = 'conf_sessions';
|
||||||
|
|
||||||
|
if (isset($_POST['id'])) {
|
||||||
|
$ID = ok($_REQUEST['id']);
|
||||||
|
$WHERECLAUSE = " WHERE id={$ID}";
|
||||||
|
$date = date('Y-m-d H:i:s');
|
||||||
|
|
||||||
|
$cols = explode(',', $_REQUEST['cols']); $vals = explode(',', $_REQUEST['vals']);
|
||||||
|
$vals = array_map('unescape_commas', $vals);
|
||||||
|
$cv = array_map(null,$cols,$vals);
|
||||||
|
$q = array_reduce($cv, 'reducer', "UPDATE `{$table}` SET ");
|
||||||
|
$q = substr($q, 0, -2);
|
||||||
|
$q .= $WHERECLAUSE;
|
||||||
|
single_row_update($q,0);
|
||||||
|
echo json_encode( array("rawvalstr"=>$_REQUEST['vals'], "result"=>"success","action"=>"updated", "query"=>$q,"err"=>mysqli_error($c)));
|
||||||
|
} else {
|
||||||
|
echo json_encode( array("result"=>"fail", "err"=>"no activity id specified") ); }
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Return an appropriate response indicating success or failure
|
||||||
|
// ...
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Close the database connection
|
||||||
|
// ...
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// later... permission check
|
||||||
|
|
||||||
|
// Check if the user has permission to update the record
|
||||||
|
/*if (isset($_POST['id'])) { // Editing another person's data
|
||||||
|
if (!check_permission($USER->id, $_POST['id'], 'personnel')) {
|
||||||
|
echo json_encode(array("result" => "fail", "err" => "You don't have permission to edit this"));
|
||||||
|
exit();
|
||||||
|
} else {
|
||||||
|
$logaction = log_it("Updating $tableName record with id {$_POST['id']}");
|
||||||
|
$recordId = $_POST['id'];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$logaction = log_it("Updating $tableName record");
|
||||||
|
$recordId = $USER->id;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$server = $_SERVER['SERVER_NAME'];
|
||||||
|
//echo("The servier name is ****************** $server");
|
||||||
|
if ( $server == 'www.gavilan.edu') {
|
||||||
|
require 'mAuth.php';
|
||||||
|
|
||||||
|
// set a session cookie so our api requests don't get mucked up ...
|
||||||
|
session_start();
|
||||||
|
|
||||||
|
$USER_TYPE = $attributes['http://wso2.org/claims/Roles'][0];
|
||||||
|
$USER_GOO = $attributes['http://wso2.org/claims/uid'][0];
|
||||||
|
$USER_EMAIL = $attributes['http://wso2.org/claims/emailaddress'][0];
|
||||||
|
|
||||||
|
$_SESSION['USER_TYPE'] = $USER_TYPE;
|
||||||
|
$_SESSION['USER_GOO'] = $USER_GOO;
|
||||||
|
$_SESSION['USER_EMAIL'] = $USER_EMAIL;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$_SESSION['USER_TYPE'] = "faculty";
|
||||||
|
$_SESSION['USER_GOO'] = "G00102586";
|
||||||
|
$_SESSION['USER_EMAIL'] = "phowell@gavilan.edu";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,106 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Top Navigation Bar -->
|
||||||
|
<div class="flex flex-wrap items-center gap-4 border-b border-gray-300 px-4 py-2 bg-white">
|
||||||
|
|
||||||
|
<!-- Dropdown Menus -->
|
||||||
|
<div class="relative group">
|
||||||
|
<button class="px-4 py-1 border border-black font-semibold hover:bg-gray-100 focus:outline-none">
|
||||||
|
Schedule
|
||||||
|
</button>
|
||||||
|
<div class="absolute z-10 hidden group-hover:block bg-white shadow-md border mt-1">
|
||||||
|
<ul class="text-sm text-blue-700 whitespace-nowrap">
|
||||||
|
<li><a href="#" class="block px-4 py-2 hover:bg-gray-100">Basic</a></li>
|
||||||
|
<li><a href="#" class="block px-4 py-2 hover:bg-gray-100">With Enrollment</a></li>
|
||||||
|
<li><a href="#" class="block px-4 py-2 hover:bg-gray-100">Early / Late</a></li>
|
||||||
|
<li><a href="#" class="block px-4 py-2 hover:bg-gray-100">Enrollment Velocity</a></li>
|
||||||
|
<li><a href="#" class="block px-4 py-2 hover:bg-gray-100">Graphic Overview</a></li>
|
||||||
|
<li><a href="#" class="block px-4 py-2 hover:bg-gray-100">Delivery by Semester</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="relative group">
|
||||||
|
<button class="px-4 py-1 border border-black font-semibold hover:bg-gray-100">Catalog</button>
|
||||||
|
<div class="absolute z-10 hidden group-hover:block bg-white shadow-md border mt-1">
|
||||||
|
<ul class="text-sm text-blue-700 whitespace-nowrap">
|
||||||
|
<li><a href="#" class="block px-4 py-2 hover:bg-gray-100">Programs</a></li>
|
||||||
|
<li><a href="#" class="block px-4 py-2 hover:bg-gray-100">Graphic Overview</a></li>
|
||||||
|
<li><a href="#" class="block px-4 py-2 hover:bg-gray-100">Courses</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="relative group">
|
||||||
|
<button class="px-4 py-1 border border-black font-semibold hover:bg-gray-100">Faculty</button>
|
||||||
|
<div class="absolute z-10 hidden group-hover:block bg-white shadow-md border mt-1">
|
||||||
|
<ul class="text-sm text-blue-700 whitespace-nowrap">
|
||||||
|
<li><a href="#" class="block px-4 py-2 hover:bg-gray-100">History and Training</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Spacer -->
|
||||||
|
<div class="flex-grow"></div>
|
||||||
|
|
||||||
|
<!-- Term Selector
|
||||||
|
<select class="border border-blue-500 rounded px-2 py-1 focus:outline-none focus:ring focus:ring-blue-200">
|
||||||
|
<option>Fall 2025</option>
|
||||||
|
<option>Summer 2019</option>
|
||||||
|
<option>Fall 2019</option>
|
||||||
|
<option>Spring 2020</option>
|
||||||
|
<option>Summer 2020</option>
|
||||||
|
<option>Fall 2020</option>
|
||||||
|
<option>Spring 2021</option>
|
||||||
|
</select>
|
||||||
|
</div> -->
|
||||||
|
|
||||||
|
<!-- Header -->
|
||||||
|
<div class="px-4 py-2">
|
||||||
|
<h2 class="text-xl font-bold text-blue-900">FALL 2025 – QUICK COURSE FINDER</h2>
|
||||||
|
<p class="text-xs text-gray-500 mt-1">Last updated: July 12 2025 1:01 pm</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h3 class="text-xl font-bold text-gray-900 mt-6 mb-2 border-b pb-1">Jan 23, 2025 — Optional Day</h3>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br clear="all" />
|
||||||
|
|
||||||
|
|
||||||
|
<div class="bg-white border rounded-lg shadow p-4 mb-4">
|
||||||
|
<div class="flex flex-col md:flex-row md:justify-between">
|
||||||
|
<div>
|
||||||
|
<h2 class="text-lg font-semibold text-gray-800">SLO & Backward Design</h2>
|
||||||
|
<div class="text-sm text-gray-600">
|
||||||
|
<span class="block">10:00am – 11:30am</span>
|
||||||
|
<span class="block">In Person @ SS 205</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mt-2 md:mt-0 md:text-right">
|
||||||
|
<span class="inline-block px-2 py-1 text-xs font-semibold text-white bg-green-500 rounded">In Person</span>
|
||||||
|
<button class="ml-2 text-sm text-blue-600 hover:underline">Edit</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mt-2 text-sm text-gray-700 line-clamp-3">
|
||||||
|
This workshop offers a hands-on experience aimed at demystifying Student Learning Outcomes (SLOs)...
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,115 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Sessions - Improved Layout</title>
|
||||||
|
<script src="https://cdn.tailwindcss.com"></script>
|
||||||
|
<script>
|
||||||
|
function toggleDescription(id) {
|
||||||
|
const para = document.getElementById(id);
|
||||||
|
const btn = document.getElementById(id + '-btn');
|
||||||
|
para.classList.toggle('line-clamp-3');
|
||||||
|
btn.textContent = para.classList.contains('line-clamp-3') ? 'Show More' : 'Show Less';
|
||||||
|
}
|
||||||
|
function toggleDay(id) {
|
||||||
|
const group = document.getElementById(id);
|
||||||
|
const btn = document.getElementById(id + '-toggle');
|
||||||
|
group.classList.toggle('hidden');
|
||||||
|
btn.textContent = group.classList.contains('hidden') ? 'Expand Day' : 'Collapse Day';
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body class="bg-gray-50 min-h-screen pb-20">
|
||||||
|
<div class="max-w-2xl mx-auto p-4">
|
||||||
|
|
||||||
|
<!-- Date Group Heading -->
|
||||||
|
<div class="flex justify-between items-center mb-3">
|
||||||
|
<h3 class="text-xl font-bold text-gray-800">Jan 23, 2025 — Optional Day</h3>
|
||||||
|
<button id="day1-toggle" onclick="toggleDay('day1')" class="text-sm text-blue-600 hover:underline">Collapse Day</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="day1">
|
||||||
|
<!-- Session Card 1 -->
|
||||||
|
<div class="bg-white rounded-lg shadow p-4 mb-4">
|
||||||
|
<div class="flex justify-between items-start">
|
||||||
|
<div>
|
||||||
|
<h2 class="text-lg font-semibold text-gray-900">SLO & Backward Design</h2>
|
||||||
|
<p class="text-sm text-gray-600">10:00am – 11:30am · SS 205</p>
|
||||||
|
</div>
|
||||||
|
<div class="flex gap-2">
|
||||||
|
<span class="text-xs font-semibold text-white bg-green-500 px-2 py-1 rounded">In Person</span>
|
||||||
|
<button class="text-sm text-blue-600 hover:underline">Edit</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p id="desc1" class="mt-2 text-sm text-gray-700 line-clamp-3">
|
||||||
|
This workshop offers a hands-on experience aimed at demystifying Student Learning Outcomes (SLOs) and Service Area Outcomes (SAOs), providing strategies for aligning assessments with outcomes...
|
||||||
|
</p>
|
||||||
|
<button id="desc1-btn" onclick="toggleDescription('desc1')" class="mt-1 text-xs text-blue-600 hover:underline">Show More</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Session Card 2 -->
|
||||||
|
<div class="bg-white rounded-lg shadow p-4 mb-4">
|
||||||
|
<div class="flex justify-between items-start">
|
||||||
|
<div>
|
||||||
|
<h2 class="text-lg font-semibold text-gray-900">Colonialism and Racism in the US</h2>
|
||||||
|
<p class="text-sm text-gray-600">1:00pm – 3:00pm · Online</p>
|
||||||
|
</div>
|
||||||
|
<div class="flex gap-2">
|
||||||
|
<span class="text-xs font-semibold text-white bg-blue-500 px-2 py-1 rounded">Online</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p id="desc2" class="mt-2 text-sm text-gray-700 line-clamp-3">
|
||||||
|
An in-depth discussion exploring the history and legacy of colonialism and systemic racism in the U.S., connecting past to present-day impacts and policies...
|
||||||
|
</p>
|
||||||
|
<button id="desc2-btn" onclick="toggleDescription('desc2')" class="mt-1 text-xs text-blue-600 hover:underline">Show More</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Session Card 3 -->
|
||||||
|
<div class="bg-white rounded-lg shadow p-4 mb-4">
|
||||||
|
<div class="flex justify-between items-start">
|
||||||
|
<div>
|
||||||
|
<h2 class="text-lg font-semibold text-gray-900">Artificial Intelligence</h2>
|
||||||
|
<p class="text-sm text-gray-600">2:00pm – 3:00pm · Online</p>
|
||||||
|
</div>
|
||||||
|
<div class="flex gap-2">
|
||||||
|
<span class="text-xs font-semibold text-white bg-blue-500 px-2 py-1 rounded">Online</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p id="desc3" class="mt-2 text-sm text-gray-700 line-clamp-3">
|
||||||
|
Learn about the current state and future implications of AI technologies in education and society, with a discussion of ethical challenges and applications...
|
||||||
|
</p>
|
||||||
|
<button id="desc3-btn" onclick="toggleDescription('desc3')" class="mt-1 text-xs text-blue-600 hover:underline">Show More</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Date Group Heading -->
|
||||||
|
<h3 class="text-xl font-bold text-gray-800 mt-6 mb-3 border-b pb-1">Jan 24, 2025 — Mandatory Day</h3>
|
||||||
|
|
||||||
|
<!-- Session Card 4 -->
|
||||||
|
<div class="bg-white rounded-lg shadow p-4 mb-4">
|
||||||
|
<div class="flex justify-between items-start">
|
||||||
|
<div>
|
||||||
|
<h2 class="text-lg font-semibold text-gray-900">Welcome Back to all Employees</h2>
|
||||||
|
<p class="text-sm text-gray-600">9:15am – 10:20am · In Person</p>
|
||||||
|
</div>
|
||||||
|
<div class="flex gap-2">
|
||||||
|
<span class="text-xs font-semibold text-white bg-green-500 px-2 py-1 rounded">In Person</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p id="desc4" class="mt-2 text-sm text-gray-700 line-clamp-3">
|
||||||
|
Kick off the semester with important updates and a community-wide welcome message from leadership. A chance to reconnect and re-align as we start a new term...
|
||||||
|
</p>
|
||||||
|
<button id="desc4-btn" onclick="toggleDescription('desc4')" class="mt-1 text-xs text-blue-600 hover:underline">Show More</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Sticky Footer -->
|
||||||
|
<footer class="fixed bottom-0 left-0 w-full bg-white border-t p-3 flex justify-around text-sm font-medium text-gray-800 shadow">
|
||||||
|
<button class="hover:text-blue-600">My Itinerary</button>
|
||||||
|
<button class="hover:text-blue-600">All Sessions</button>
|
||||||
|
<button class="hover:text-blue-600">GOTT</button>
|
||||||
|
</footer>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,101 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>My Itinerary</title>
|
||||||
|
<script src="https://cdn.tailwindcss.com"></script>
|
||||||
|
</head>
|
||||||
|
<body class="bg-gray-50 min-h-screen pb-24">
|
||||||
|
<div class="max-w-2xl mx-auto p-4">
|
||||||
|
|
||||||
|
<div class="text-center mb-4">
|
||||||
|
<h1 class="text-2xl font-bold text-gray-800">My Itinerary</h1>
|
||||||
|
<p class="text-sm text-gray-500">Current time: Jul 14, 9:41pm. Return here on the day of your sessions for Zoom links.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Jan 23 Day Group -->
|
||||||
|
<div class="flex justify-between items-center mb-3">
|
||||||
|
<h3 class="text-xl font-bold text-gray-800">Jan 23, 2025 — Optional Day</h3>
|
||||||
|
<button id="day1-toggle" onclick="toggleDay('day1')" class="text-sm text-blue-600 hover:underline">Collapse Day</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="day1">
|
||||||
|
<!-- Session Card 1 -->
|
||||||
|
<div class="bg-white border-l-4 border-green-500 rounded-md shadow-sm p-4 mb-3">
|
||||||
|
<div class="flex justify-between items-start">
|
||||||
|
<div>
|
||||||
|
<h2 class="text-base font-semibold text-gray-800">SLO & Backward Design</h2>
|
||||||
|
<p class="text-sm text-gray-600">10:00am – 11:30am · In Person · SS 205</p>
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-col items-end gap-2">
|
||||||
|
<span class="text-xs font-semibold text-green-600">In Person</span>
|
||||||
|
<button class="text-xs text-red-600 hover:underline">Cancel</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Session Card 2 -->
|
||||||
|
<div class="bg-white border-l-4 border-blue-500 rounded-md shadow-sm p-4 mb-3">
|
||||||
|
<div class="flex justify-between items-start">
|
||||||
|
<div>
|
||||||
|
<h2 class="text-base font-semibold text-gray-800">Colonialism and Racism in the US</h2>
|
||||||
|
<p class="text-sm text-gray-600">1:00pm – 3:00pm · Online</p>
|
||||||
|
<a href="#" class="inline-block mt-1 text-sm text-blue-600 hover:underline">Join Zoom</a>
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-col items-end gap-2">
|
||||||
|
<span class="text-xs font-semibold text-blue-600">Online</span>
|
||||||
|
<button class="text-xs text-red-600 hover:underline">Cancel</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Session Card 3 -->
|
||||||
|
<div class="bg-white border-l-4 border-blue-500 rounded-md shadow-sm p-4 mb-3">
|
||||||
|
<div class="flex justify-between items-start">
|
||||||
|
<div>
|
||||||
|
<h2 class="text-base font-semibold text-gray-800">Artificial Intelligence</h2>
|
||||||
|
<p class="text-sm text-gray-600">2:00pm – 3:00pm · Online</p>
|
||||||
|
<a href="#" class="inline-block mt-1 text-sm text-blue-600 hover:underline">Join Zoom</a>
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-col items-end gap-2">
|
||||||
|
<span class="text-xs font-semibold text-blue-600">Online</span>
|
||||||
|
<button class="text-xs text-red-600 hover:underline">Cancel</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Jan 24 Day Group -->
|
||||||
|
<h3 class="text-xl font-bold text-gray-800 mt-6 mb-3">Jan 24, 2025 — Mandatory Day</h3>
|
||||||
|
<div class="bg-white border-l-4 border-green-500 rounded-md shadow-sm p-4 mb-3">
|
||||||
|
<div class="flex justify-between items-start">
|
||||||
|
<div>
|
||||||
|
<h2 class="text-base font-semibold text-gray-800">Welcome Back to all Employees</h2>
|
||||||
|
<p class="text-sm text-gray-600">9:15am – 10:20am · In Person · Main Auditorium</p>
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-col items-end gap-2">
|
||||||
|
<span class="text-xs font-semibold text-green-600">In Person</span>
|
||||||
|
<button class="text-xs text-red-600 hover:underline">Cancel</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Sticky Footer -->
|
||||||
|
<footer class="fixed bottom-0 left-0 w-full bg-white border-t p-3 flex justify-around text-sm font-medium text-gray-800 shadow">
|
||||||
|
<button class="hover:text-blue-600">My Itinerary</button>
|
||||||
|
<button class="hover:text-blue-600">All Sessions</button>
|
||||||
|
<button class="hover:text-blue-600">GOTT</button>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function toggleDay(id) {
|
||||||
|
const group = document.getElementById(id);
|
||||||
|
const btn = document.getElementById(id + '-toggle');
|
||||||
|
group.classList.toggle('hidden');
|
||||||
|
btn.textContent = group.classList.contains('hidden') ? 'Expand Day' : 'Collapse Day';
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$MY_TITLE = "Edit Activity";
|
||||||
|
$WHICH = 0;
|
||||||
|
if (isset($_REQUEST['w'])) { $WHICH = $_REQUEST['w']; }
|
||||||
|
else {
|
||||||
|
$MY_TITLE = "Create Activity";
|
||||||
|
}
|
||||||
|
$MY_CRUMB = "Activities";
|
||||||
|
$CONTENT = '<activityedit :which=' . $WHICH . '></activitylist>';
|
||||||
|
include 'layout.php';
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$MY_TITLE = "Edit Sessions";
|
||||||
|
$MY_CRUMB = "Edit";
|
||||||
|
$CONTENT = '<activityeditorlist></activityeditorlist>';
|
||||||
|
include 'layout.php';
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
title,starttime,length,mode,location_irl,desc,location,type
|
||||||
|
Welcome Back to all Employees,2025-08-22 09:00:00,2,hybrid,Theater,Join us for the morning session and kick off the Fall 2025 semester.,,20
|
||||||
|
Just Report It/Title IX,2025-08-21 09:00:00,50,online,,"It can be difficult to decide where and how to report an incident here at Gavilan. In this session, we will discuss the different types of referrals and reporting forms. Potential referrals and reports may include disruptive behaviors, harassment, sexual misconduct, trip hazards, injuries on campus, academic integrity, emotional wellness, basic needs, student complaints, and more.",https://gavilan-edu.zoom.us/j/6925203873?omn=88194616085,101
|
||||||
|
Empowering Educators: Navigating Imposter Syndrome,2025-08-21 10:00:00,90,online,,"First of two sessions designed to help you create inclusive, supportive learning
|
||||||
|
environments where every student can thrive. Participants will:
|
||||||
|
Develop an understanding of the five types of imposter syndrome
|
||||||
|
Adapt strategies to cultivate vulnerability and authenticity in the classroom",https://us02web.zoom.us/j/89823148464,101
|
||||||
|
Club Advisor Training,2025-08-21 10:00:00,90,hybrid,SS 111,"This workshop will share information with current and prospective club advisors on best practices including managing club finances, processes for organizing events, travel and fundraising.",,101
|
||||||
|
"Making Assessment a Culture, Not a Checkbox",2025-08-21 12:00:00,90,hybrid,SS 205,"How meaningful does SLO and SAO assessment feel to you? In many ways, our current approaches feel empty. There is a myth that all we need to do is assess and archive and, voila, we are done. In this session, we will examine the need to “close the loop” in assessment in order to increase equity, accountability, and student success, as well as to make this work meaningful. SLO assessment should help us identify best practices and improve our teaching and our classrooms. We will look at how to do this work together. This will be an interactive session. By the end of our workshop, we hope that you will have concrete steps in mind around “closing the loop,” which you can bring back to your department or program.",,101
|
||||||
|
"Tortured Histories: Race, Health, and Medicine in the US",2025-08-21 12:00:00,150,online,,"Important for health professionals and everyone concerned about the health of their communities. Dr. Richard Daily, a scholar of African American and Queer history, will explore with us how United States medicine was developed through experimentation on and torture of enslaved women, cadavers, those deemed mentally ill, incarcerated folks, and even everyday people.",,101
|
||||||
|
Employee Benefits Overview,2025-08-21 14:45:00,1,hybrid,MP 114,"This workshop will cover the following health benefits: medical, dental, vision, life insurance, voluntary insurance plans, employee assistance program and other benefit enhancements. In addition, we will review changes in medical benefit rates which go into effect as of October 1, 2023, for the start of our new medical plan year.",,101
|
||||||
|
UFW Workshop Supporting Undocumented and Immigrant Students,2025-08-21 09:00:00,2,inperson,,TBD and START TIME ALSO TBD,,101
|
||||||
|
Full-Time Faculty Orientation,2025-08-21 14:45:00,105,inperson,,"<p>This orientation welcomes new full-time faculty and introduces key resources, responsibilities, and support systems at the college. Participants will:<ul><li>Meet the faculty mentoring team and learn about upcoming FT-specific sessions.</li><li>Get started on technology and technical support services.</li><li>Understand Flex obligations and co-curricular opportunities for faculty engagement.</li><li>Gain insight into college structure and shared governance.</li></ul><p>This session is designed to support your successful transition into full-time teaching. Come ready with questions!</p>",,101
|
||||||
|
Breakfast / Affinity Groups Tables,2025-08-22 08:00:00,45,inperson,Student Center,,,101
|
||||||
|
LGBTQ+ Training,2025-08-22 11:15:00,1,inperson,SS 210,,,101
|
||||||
|
Reports and Tools in Precision Campus,2025-08-22 11:15:00,1,hybrid,SS 205,"We will introduce the reports and interface of Precision Campus, which is a platform that provides institutional data and helps track student outcomes. We will demonstrate the features in Precision Campus that users may find helpful for understanding student success, retention, and persistence. This workshop may be helpful for anyone working on program review or grants. ",,101
|
||||||
|
Classroom Technology Upgrades,2025-08-22 11:15:00,1,hybrid,MP 114,"With the completion of the Hollister Campus classrooms, the new Classroom Technology Standards have been implemented. This training session will cover all essential aspects of the new audio, visual, and hyflex technology, helping ensure that faculty members are well-prepared to incorporate it into their teaching. Our goal is to ensure a smooth transition and effective use of these new tools. In the Fall of 2024, a demonstration classroom with the standard technology was developed in the Gilroy campus in the Multipurpose room 114. Several of you visited the classroom and had an opportunity to experience the technology and provide valuable input to adjust the standards. These adjustments have been implemented at the Hollister campus as well as eight classrooms on the Gilroy campus which are currently going through a renovation process. If you are scheduled to teach at the Hollister campus or one of the Gilroy classrooms, this session is a must for you.",,101
|
||||||
|
Cultivating Empathy and Belonging to Break Bias Barriers,2025-08-22 11:15:00,1,online,,"Second of two sessions designed to help you create inclusive, supportive learning environments. Participants will:
|
||||||
|
Learn practical applications of empathy to boost student engagement
|
||||||
|
Applying asset-based frameworks to foster student success
|
||||||
|
Gain knowledge to the Universal Design for Learning to help meet the diverse needs of all students",https://us02web.zoom.us/j/89823148464,101
|
||||||
|
Nature Walk,2025-08-22 11:15:00,1,inperson,Meet outside Security Office,"Meet outside of the Security Office to begin your guided tour of Gavilan. Together, we will head down the Oak Woodland foothill trails to observe the natural beauty. Explore the arboretum, bird boxes, duck pond, and oak woodland projects. This is an opportunity to be in community with one another and to be more present to the beauty that surrounds us.",,101
|
||||||
|
Supporting Distressed Students,2025-08-22 11:15:00,1,online,,"Do you have students that you know could use mental health and wellness support? Do you have students that seem to be distressed, and you just aren’t sure how to approach them? Attend this session to learn some strategies to help your students access resources and for you to feel more confident to assist your students. After this session, you will be able to recognize progressing signs and symptoms of mental health and wellness decline and understand where to guide the distressed student for support.",https://gavilan-edu.zoom.us/j/6925203873?omn=81138397628,101
|
||||||
|
Lunch,2025-08-22 12:15:00,1,inperson,Student Center,Please sign up for lunch if you plan on attending. We want an accurate count to order food!,,101
|
||||||
|
Centering Connection: Approaches to Student Conduct through a Restorative Justice & Mindfulness Lens,2025-08-22 13:20:00,1,hybrid,SS 205,"<p>This interactive workshop will explore how restorative justice (RJ) practices and mindfulness-based strategies can transform student conduct and classroom management approaches. Rather than focusing on punitive discipline, we will examine how restorative and mindful approaches foster deeper accountability, empathy, community building, and healing. Workshop participants will gain practical tools for addressing conflict, behavioral disruptions, and harm in ways that support student growth and foster inclusive learning environments. </p><p>As part of this session, Professor Jessica Hooper will share examples of short, accessible mindfulness practices that faculty can easily integrate into their classes to promote emotional regulation, focus, and a sense of calm. These techniques are especially helpful in moments of tension in the classroom.</p><p>In addition, we will provide an overview of the Just Report It webpage and the CARE report process, offering clear guidance for faculty and staff who have concerns about a student in their classroom or program.</p>",,101
|
||||||
|
Dual Enrollment,2025-08-22 13:20:00,1,hybrid,MP 114,,,101
|
||||||
|
The Basics of Excel,2025-08-22 13:20:00,1,online,,"Master the fundamentals of Excel with this beginner-friendly training! You'll learn essential skills like navigating spreadsheets, entering and formatting data, using basic formulas, and creating simple pivot tables. Whether you're new to Excel or need a refresher, this session will help you build confidence and efficiency in handling data.",,101
|
||||||
|
"Win a Shirt, Change a life: Become a Basic Needs Ally",2025-08-22 13:20:00,1,inperson,El Centro,"You’ve seen the shirt—now earn it! Join El Centro for a fast-paced, interactive Kahoot session where you’ll test your knowledge, win exclusive swag (yes, that Basic Needs Ally shirt), and gain practical tools to support students facing food insecurity, housing instability, and more. Learn how faculty, classified staff, and administrators alike can break down barriers and connect students to life-changing resources—no matter your role. Come for the prizes, leave as a campus ally.",,101
|
||||||
|
Just in Time Support for Canvas Shells/Courses,2025-08-22 13:20:00,1,hybrid,BU 120,"Elevate your online teaching experience this semester with our zoom “Drop-in Live Help” session. Benefit from instant guidance, solutions, and collaborative discussions with fellow teachers. Troubleshooting technical issues? Our experts, Peter and Sabrina will be here to assist you on the spot. Don't let challenges hold you back – join us and start the semester off in your online classroom with confidence!",,101
|
||||||
|
Strategies for Part-Time Faculty,2025-08-22 14:30:00,1,online,,,,101,1413
|
||||||
|
Budget Workshop,2025-08-22 14:30:00,1,,,Become more familiar with the Gavilan budget and all the figures frequently referred to in meetings and reports. The administration will give a brief overview and discuss the organization and details of our budget. There will be time for discussion and questions.,,101,1413
|
||||||
|
Artificial Intelligence,2025-08-22 14:30:00,1,online,,Continue the discussion and share strategies for approaching AI. Emphasis on how it can help or hurt learning and thinking. We'll also review how to introduce and frame AI tools for our students.,https://zoom.us/my/phowell,101,1413
|
||||||
|
CAP Clusters Planning Work,2025-08-22 14:30:00,1,inperson,,,,101,1413
|
||||||
|
Mindfulness,2025-08-22 14:30:00,1,inperson,MP 114,"In this session, we will explore together how to create a space for learning, reflection, and practice around self-care, focusing on how mindfulness meditation can deepen our awareness of everyday moments that impact our well-being. We’ll explore the science behind mindfulness and self-care, learning how small, intentional choices can support our overall health and help us cultivate more meaningful, mindful habits.",,101,1413
|
||||||
|
Can't render this file because it has a wrong number of fields in line 30.
|
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?php
|
||||||
|
$MY_TITLE = "Training History";
|
||||||
|
$MY_CRUMB = "History";
|
||||||
|
|
||||||
|
|
||||||
|
$CONTENT = '<traininghistory></traininghistory>';
|
||||||
|
include 'layout.php';
|
||||||
|
|
@ -0,0 +1,142 @@
|
||||||
|
<?php
|
||||||
|
$host = '192.168.1.6';
|
||||||
|
$db = 'db';
|
||||||
|
$user = 'phowell';
|
||||||
|
$pass = 'rolley34';
|
||||||
|
|
||||||
|
$mysqli = new mysqli($host, $user, $pass, $db);
|
||||||
|
if ($mysqli->connect_error) {
|
||||||
|
die("DB Connection failed: " . $mysqli->connect_error);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// import and get id of welcome session to use as parent
|
||||||
|
if (0) {
|
||||||
|
$csvFile = 'fa25import.csv';
|
||||||
|
$handle = fopen($csvFile, 'r');
|
||||||
|
if (!$handle) {
|
||||||
|
die("Cannot open CSV file.");
|
||||||
|
}
|
||||||
|
|
||||||
|
$headers = fgetcsv($handle);
|
||||||
|
|
||||||
|
// Strip BOM from first header field
|
||||||
|
if ($headers && substr($headers[0], 0, 3) === "\xEF\xBB\xBF") {
|
||||||
|
$headers[0] = substr($headers[0], 3);
|
||||||
|
}
|
||||||
|
$firstId = null;
|
||||||
|
$rowNum = 0;
|
||||||
|
|
||||||
|
$columns = array_map('trim', $headers);
|
||||||
|
$placeholders = array_fill(0, count($columns) + 1, '?'); // +1 for 'parent'
|
||||||
|
|
||||||
|
echo "Columns:";
|
||||||
|
print_r($columns);
|
||||||
|
echo "\n\n";
|
||||||
|
|
||||||
|
$quotedColumns = array_map(fn($col) => "`" . str_replace("`", "``", $col) . "`", $columns);
|
||||||
|
$sql = "INSERT INTO conf_sessions (" . implode(",", $quotedColumns) . ", parent) VALUES (" . implode(",", $placeholders) . ")";
|
||||||
|
|
||||||
|
$stmt = $mysqli->prepare($sql);
|
||||||
|
if (!$stmt) {
|
||||||
|
die("Prepare failed: " . $mysqli->error);
|
||||||
|
}
|
||||||
|
|
||||||
|
while (($data = fgetcsv($handle)) !== false) {
|
||||||
|
// Pad missing fields
|
||||||
|
while (count($data) < count($columns)) {
|
||||||
|
$data[] = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$rowNum++;
|
||||||
|
$parent = ($rowNum === 1) ? 0 : $firstId;
|
||||||
|
|
||||||
|
$bindParams = array_merge($data, [$parent]);
|
||||||
|
$types = str_repeat('s', count($bindParams)); // All strings; adjust if needed
|
||||||
|
|
||||||
|
// Create reference array for bind_param
|
||||||
|
$refs = [];
|
||||||
|
foreach ($bindParams as $key => $value) {
|
||||||
|
$refs[$key] = &$bindParams[$key];
|
||||||
|
}
|
||||||
|
|
||||||
|
array_unshift($refs, $types);
|
||||||
|
call_user_func_array([$stmt, 'bind_param'], $refs);
|
||||||
|
|
||||||
|
if (!$stmt->execute()) {
|
||||||
|
echo "Error on row $rowNum: " . $stmt->error . "\n";
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
echo "Success for row $rowNum\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($rowNum === 1) {
|
||||||
|
$firstId = $mysqli->insert_id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose($handle);
|
||||||
|
$stmt->close();
|
||||||
|
$mysqli->close();
|
||||||
|
|
||||||
|
echo "Import completed. First ID: $firstId\n";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// just plain import rows
|
||||||
|
$csvFile = 'import2.csv';
|
||||||
|
$handle = fopen($csvFile, 'r');
|
||||||
|
if (!$handle) {
|
||||||
|
die("Cannot open CSV file.");
|
||||||
|
}
|
||||||
|
|
||||||
|
$headers = fgetcsv($handle);
|
||||||
|
|
||||||
|
// Strip BOM from first header if present
|
||||||
|
if ($headers && substr($headers[0], 0, 3) === "\xEF\xBB\xBF") {
|
||||||
|
$headers[0] = substr($headers[0], 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
$columns = array_map('trim', $headers);
|
||||||
|
$quotedColumns = array_map(fn($col) => "`" . str_replace("`", "``", $col) . "`", $columns);
|
||||||
|
$placeholders = array_fill(0, count($columns), '?');
|
||||||
|
|
||||||
|
$sql = "INSERT INTO conf_sessions (" . implode(",", $quotedColumns) . ") VALUES (" . implode(",", $placeholders) . ")";
|
||||||
|
$stmt = $mysqli->prepare($sql);
|
||||||
|
if (!$stmt) {
|
||||||
|
die("Prepare failed: " . $mysqli->error);
|
||||||
|
}
|
||||||
|
|
||||||
|
$rowNum = 0;
|
||||||
|
while (($data = fgetcsv($handle)) !== false) {
|
||||||
|
while (count($data) < count($columns)) {
|
||||||
|
$data[] = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$rowNum++;
|
||||||
|
$types = str_repeat('s', count($data));
|
||||||
|
|
||||||
|
$refs = [];
|
||||||
|
foreach ($data as $k => $v) {
|
||||||
|
$refs[$k] = &$data[$k];
|
||||||
|
}
|
||||||
|
array_unshift($refs, $types);
|
||||||
|
call_user_func_array([$stmt, 'bind_param'], $refs);
|
||||||
|
|
||||||
|
if (!$stmt->execute()) {
|
||||||
|
echo "Error on row $rowNum: " . $stmt->error . "\n";
|
||||||
|
} else {
|
||||||
|
echo "Inserted row $rowNum\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose($handle);
|
||||||
|
$stmt->close();
|
||||||
|
$mysqli->close();
|
||||||
|
|
||||||
|
echo "Import complete.\n";
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
title,starttime,length,mode,location_irl,desc,location,type,parent
|
||||||
|
Strategies for Part-Time Faculty,2025-08-22 14:30:00,1,online,,,,101,1413
|
||||||
|
Budget Workshop,2025-08-22 14:30:00,1,,,Become more familiar with the Gavilan budget and all the figures frequently referred to in meetings and reports. The administration will give a brief overview and discuss the organization and details of our budget. There will be time for discussion and questions.,,101,1413
|
||||||
|
Artificial Intelligence,2025-08-22 14:30:00,1,online,,Continue the discussion and share strategies for approaching AI. Emphasis on how it can help or hurt learning and thinking. We'll also review how to introduce and frame AI tools for our students.,https://zoom.us/my/phowell,101,1413
|
||||||
|
CAP Clusters Planning Work,2025-08-22 14:30:00,1,inperson,,,,101,1413
|
||||||
|
Mindfulness,2025-08-22 14:30:00,1,inperson,MP 114,"In this session, we will explore together how to create a space for learning, reflection, and practice around self-care, focusing on how mindfulness meditation can deepen our awareness of everyday moments that impact our well-being. We’ll explore the science behind mindfulness and self-care, learning how small, intentional choices can support our overall health and help us cultivate more meaningful, mindful habits.",,101,1413
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
<?php
|
||||||
|
$MY_TITLE = "Itinerary";
|
||||||
|
$MY_CRUMB = "My Schedule";
|
||||||
|
$CONTENT = "<activitylist :itineraryview='1'></activitylist>";
|
||||||
|
include 'layout.php';
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,6 @@
|
||||||
|
// pell text editor
|
||||||
|
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t.pell={})}(this,function(t){"use strict";var e=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},c="defaultParagraphSeparator",l="formatBlock",a=function(t,e,n){return t.addEventListener(e,n)},s=function(t,e){return t.appendChild(e)},d=function(t){return document.createElement(t)},n=function(t){return document.queryCommandState(t)},f=function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:null;return document.execCommand(t,!1,e)},p={bold:{icon:"<b>B</b>",title:"Bold",state:function(){return n("bold")},result:function(){return f("bold")}},italic:{icon:"<i>I</i>",title:"Italic",state:function(){return n("italic")},result:function(){return f("italic")}},underline:{icon:"<u>U</u>",title:"Underline",state:function(){return n("underline")},result:function(){return f("underline")}},strikethrough:{icon:"<strike>S</strike>",title:"Strike-through",state:function(){return n("strikeThrough")},result:function(){return f("strikeThrough")}},heading1:{icon:"<b>H<sub>1</sub></b>",title:"Heading 1",result:function(){return f(l,"<h1>")}},heading2:{icon:"<b>H<sub>2</sub></b>",title:"Heading 2",result:function(){return f(l,"<h2>")}},paragraph:{icon:"¶",title:"Paragraph",result:function(){return f(l,"<p>")}},quote:{icon:"“ ”",title:"Quote",result:function(){return f(l,"<blockquote>")}},olist:{icon:"#",title:"Ordered List",result:function(){return f("insertOrderedList")}},ulist:{icon:"•",title:"Unordered List",result:function(){return f("insertUnorderedList")}},code:{icon:"</>",title:"Code",result:function(){return f(l,"<pre>")}},line:{icon:"―",title:"Horizontal Line",result:function(){return f("insertHorizontalRule")}},link:{icon:"🔗",title:"Link",result:function(){var t=window.prompt("Enter the link URL");t&&f("createLink",t)}},image:{icon:"📷",title:"Image",result:function(){var t=window.prompt("Enter the image URL");t&&f("insertImage",t)}}},m={actionbar:"pell-actionbar",button:"pell-button",content:"pell-content",selected:"pell-button-selected"},r=function(n){var t=n.actions?n.actions.map(function(t){return"string"==typeof t?p[t]:p[t.name]?e({},p[t.name],t):t}):Object.keys(p).map(function(t){return p[t]}),r=e({},m,n.classes),i=n[c]||"div",o=d("div");o.className=r.actionbar,s(n.element,o);var u=n.element.content=d("div");return u.contentEditable=!0,u.className=r.content,u.oninput=function(t){var e=t.target.firstChild;e&&3===e.nodeType?f(l,"<"+i+">"):"<br>"===u.innerHTML&&(u.innerHTML=""),n.onChange(u.innerHTML)},u.onkeydown=function(t){var e;"Enter"===t.key&&"blockquote"===(e=l,document.queryCommandValue(e))&&setTimeout(function(){return f(l,"<"+i+">")},0)},s(n.element,u),t.forEach(function(t){var e=d("button");if(e.className=r.button,e.innerHTML=t.icon,e.title=t.title,e.setAttribute("type","button"),e.onclick=function(){return t.result()&&u.focus()},t.state){var n=function(){return e.classList[t.state()?"add":"remove"](r.selected)};a(u,"keyup",n),a(u,"mouseup",n),a(e,"click",n)}s(o,e)}),n.styleWithCSS&&f("styleWithCSS"),f(c,i),n.element},i={exec:f,init:r};t.exec=f,t.init=r,t.default=i,Object.defineProperty(t,"__esModule",{value:!0})});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,69 @@
|
||||||
|
<?php
|
||||||
|
// layout.php (Tailwind version)
|
||||||
|
require_once 'auth.php';
|
||||||
|
require_once 'semester.php';
|
||||||
|
|
||||||
|
if (!isset($MY_TITLE)) $MY_TITLE = "Untitled Page";
|
||||||
|
if (!isset($MY_CRUMB)) $MY_CRUMB = $MY_TITLE;
|
||||||
|
if (!isset($CONTENT)) $CONTENT = "<p>No content provided.</p>";
|
||||||
|
|
||||||
|
$MY_PATH = $_SERVER['PHP_SELF'];
|
||||||
|
$MOD_DATE = file_exists(__FILE__) ? date("F d Y H:i.", filemtime(__FILE__)) : "(unknown)";
|
||||||
|
?><!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title><?= htmlspecialchars($MY_TITLE) ?> | Gavilan Intranet</title>
|
||||||
|
<script src="https://cdn.tailwindcss.com"></script>
|
||||||
|
<script src="js/vue27max.js"></script>
|
||||||
|
<script src="js/intranet_libs.js"/></script>
|
||||||
|
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||||
|
</head>
|
||||||
|
<body class="bg-gray-100 min-h-screen">
|
||||||
|
<div class="max-w-7xl mx-auto p-4">
|
||||||
|
<!-- Breadcrumb -->
|
||||||
|
<nav class="text-sm text-gray-600 mb-4">
|
||||||
|
<?= $CRUMB_START . htmlspecialchars($MY_CRUMB) ?>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<!-- Full page content container -->
|
||||||
|
<div class="max-w-7xl mx-auto p-4 grid md:grid-cols-[200px_1fr] gap-6">
|
||||||
|
|
||||||
|
<!-- Desktop Navigation -->
|
||||||
|
<?php include 'nav.php'; ?>
|
||||||
|
|
||||||
|
<!-- Main content area -->
|
||||||
|
<main>
|
||||||
|
<h1 class="text-2xl font-bold text-gray-800 mb-4"><?= htmlspecialchars($MY_TITLE) ?></h1>
|
||||||
|
<div id="dir_editor">
|
||||||
|
<?= $CONTENT ?>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
<footer class="mt-12 text-sm text-gray-500 border-t pt-4">
|
||||||
|
<p>
|
||||||
|
Please send comments or questions to
|
||||||
|
<a class="text-blue-600 hover:underline" href="mailto:phowell@gavilan.edu">phowell@gavilan.edu</a><br>
|
||||||
|
Page: <a class="text-blue-600 hover:underline" href="https://<?= $server ?><?= htmlspecialchars($MY_PATH) ?>">
|
||||||
|
https://<?= $server ?><?= htmlspecialchars($MY_PATH) ?>
|
||||||
|
</a><br>
|
||||||
|
Last updated on <?= $MOD_DATE ?>
|
||||||
|
</p>
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Mobile Navigation -->
|
||||||
|
<?php include 'nav-mobile.php'; ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="alert" class="fixed top-4 right-4 bg-yellow-100 border border-yellow-300 text-yellow-800 px-4 py-2 rounded shadow-md hidden">
|
||||||
|
Alert message
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<script src="js/intranet_libs_bottom.js"/></script>
|
||||||
|
<script src="js/dir_app.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,66 @@
|
||||||
|
<?php
|
||||||
|
// layout.php (Tailwind version)
|
||||||
|
require_once 'auth.php';
|
||||||
|
require_once 'semester.php';
|
||||||
|
|
||||||
|
if (!isset($MY_TITLE)) $MY_TITLE = "Untitled Page";
|
||||||
|
if (!isset($MY_CRUMB)) $MY_CRUMB = $MY_TITLE;
|
||||||
|
if (!isset($CONTENT)) $CONTENT = "<p>No content provided.</p>";
|
||||||
|
|
||||||
|
$MY_PATH = $_SERVER['PHP_SELF'];
|
||||||
|
$MOD_DATE = file_exists(__FILE__) ? date("F d Y H:i.", filemtime(__FILE__)) : "(unknown)";
|
||||||
|
?><!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title><?= htmlspecialchars($MY_TITLE) ?> | Gavilan Intranet</title>
|
||||||
|
<script src="https://cdn.tailwindcss.com"></script>
|
||||||
|
<script src="js/vue27max.js"></script>
|
||||||
|
</head>
|
||||||
|
<body class="bg-gray-100 min-h-screen">
|
||||||
|
<div class="max-w-7xl mx-auto p-4">
|
||||||
|
<!-- Breadcrumb -->
|
||||||
|
<nav class="text-sm text-gray-600 mb-4">
|
||||||
|
<?= $CRUMB_START . htmlspecialchars($MY_CRUMB) ?>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div class="grid grid-cols-12 gap-4">
|
||||||
|
<!-- Navigation -->
|
||||||
|
<aside class="col-span-12 md:col-span-3 lg:col-span-2">
|
||||||
|
<?php include 'nav.php'; ?>
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
<!-- Main Content -->
|
||||||
|
<main class="col-span-12 md:col-span-9 lg:col-span-10">
|
||||||
|
<h1 class="text-2xl font-bold text-gray-800 mb-4"><?= htmlspecialchars($MY_TITLE) ?></h1>
|
||||||
|
<div id="dir_editor">
|
||||||
|
<?= $CONTENT ?>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Footer -->
|
||||||
|
<footer class="mt-12 text-sm text-gray-500 border-t pt-4">
|
||||||
|
<p>
|
||||||
|
Please send comments or questions to
|
||||||
|
<a class="text-blue-600 hover:underline" href="mailto:phowell@gavilan.edu">phowell@gavilan.edu</a><br>
|
||||||
|
Page: <a class="text-blue-600 hover:underline" href="https://<?= $server ?><?= htmlspecialchars($MY_PATH) ?>">
|
||||||
|
https://<?= $server ?><?= htmlspecialchars($MY_PATH) ?>
|
||||||
|
</a><br>
|
||||||
|
Last updated on <?= $MOD_DATE ?>
|
||||||
|
</p>
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="alert" class="fixed bottom-4 right-4 bg-yellow-100 border border-yellow-300 text-yellow-800 px-4 py-2 rounded shadow-md hidden">
|
||||||
|
Alert message
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<script src="js/intranet_libs.js"/></script>
|
||||||
|
<script src="js/dir_app.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<!-- Mobile sticky nav bar (visible only on small screens) -->
|
||||||
|
<footer class="fixed bottom-0 left-0 w-full bg-white/90 backdrop-blur border-t p-3 flex justify-around text-sm font-medium text-gray-800 shadow z-50 md:hidden">
|
||||||
|
<a href="index.php" class="hover:text-blue-600">My Itinerary</a>
|
||||||
|
<a href="allsessions.php" class="hover:text-blue-600">All Sessions</a>
|
||||||
|
<a href="history.php" class="hover:text-blue-600">History</a>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
<!-- Sidebar Nav (hidden on mobile, visible on md+) -->
|
||||||
|
<nav class="hidden md:flex flex-col gap-2 text-sm font-medium">
|
||||||
|
<a href="index.php" class="bg-gray-200 px-4 py-2 rounded hover:bg-gray-300">My Itinerary</a>
|
||||||
|
<a href="allsessions.php" class="bg-gray-200 px-4 py-2 rounded hover:bg-gray-300">All Sessions</a>
|
||||||
|
<a href="history.php" class="bg-gray-200 px-4 py-2 rounded hover:bg-gray-300">History</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Mobile sticky nav bar (visible only on small screens) -->
|
||||||
|
<footer class="fixed bottom-0 left-0 w-full bg-white/90 backdrop-blur border-t p-3 flex justify-around text-sm font-medium text-gray-800 shadow z-50 md:hidden">
|
||||||
|
<a href="index.php" class="hover:text-blue-600">My Itinerary</a>
|
||||||
|
<a href="allsessions.php" class="hover:text-blue-600">All Sessions</a>
|
||||||
|
<a href="history.php" class="hover:text-blue-600">History</a>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
<nav class="flex flex-col gap-2 text-sm font-medium">
|
||||||
|
|
||||||
|
<!-- Mobile sticky nav: hidden on md+ -->
|
||||||
|
<div class="hidden md:flex flex-col gap-2">
|
||||||
|
<a href="index.php" class="bg-gray-200 px-4 py-2 rounded hover:bg-gray-300">My Itinerary</a>
|
||||||
|
<a href="allsessions.php" class="bg-gray-200 px-4 py-2 rounded hover:bg-gray-300">All Sessions</a>
|
||||||
|
<a href="history.php" class="bg-gray-200 px-4 py-2 rounded hover:bg-gray-300">History</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Sidebar nav: hidden on mobile -->
|
||||||
|
<footer class="fixed bottom-0 left-0 w-full bg-white/90 backdrop-blur border-t p-3 flex justify-around text-sm font-medium text-gray-800 shadow z-50">
|
||||||
|
<a href="index.php" class="hover:text-blue-600">My Itinerary</a>
|
||||||
|
<a href="allsessions.php" class="hover:text-blue-600">All Sessions</a>
|
||||||
|
<a href="history.php" class="hover:text-blue-600">History</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
class peter_db {
|
||||||
|
private $DBServer;
|
||||||
|
private $DBUser;
|
||||||
|
private $DBPass;
|
||||||
|
private $DBName;
|
||||||
|
private $conn;
|
||||||
|
|
||||||
|
// Constructor to initialize database connection variables
|
||||||
|
public function __construct() {
|
||||||
|
$this->DBServer = '192.168.1.6'; // Your DB server (example: localhost)
|
||||||
|
$this->DBUser = 'phowell'; // Your DB username
|
||||||
|
$this->DBPass = 'rolley34'; // Your DB password
|
||||||
|
$this->DBName = 'db'; // Your DB name
|
||||||
|
}
|
||||||
|
|
||||||
|
// Method to establish a database connection
|
||||||
|
public function getConnection() {
|
||||||
|
$this->conn = new mysqli($this->DBServer, $this->DBUser, $this->DBPass, $this->DBName);
|
||||||
|
|
||||||
|
// Check the connection
|
||||||
|
if ($this->conn->connect_error) {
|
||||||
|
die('Database connection failed: ' . $this->conn->connect_error);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the character set
|
||||||
|
$this->conn->set_charset('utf8');
|
||||||
|
|
||||||
|
return $this->conn;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$m = "08";
|
||||||
|
$d = "22";
|
||||||
|
$y = "2025";
|
||||||
|
|
||||||
|
if (isset($_REQUEST['m']) ) { $m = $_REQUEST['m']; }
|
||||||
|
if (isset($_REQUEST['d']) ) { $d = $_REQUEST['d']; }
|
||||||
|
if (isset($_REQUEST['y']) ) { $y = $_REQUEST['y']; }
|
||||||
|
|
||||||
|
$day = $y . "-" . $m . "-" . $d;
|
||||||
|
|
||||||
|
$dateObj = DateTime::createFromFormat('!m', $m);
|
||||||
|
$monthName = $dateObj->format('F'); // March
|
||||||
|
|
||||||
|
|
||||||
|
$MOD_DATE = '(?)';
|
||||||
|
if (file_exists(__FILE__)) { $MOD_DATE = date ("F d Y H:i:s.", filemtime(__FILE__)); }
|
||||||
|
|
||||||
|
//if (isset($_GET['s'])) { $FOCUS = "'" . $_GET['s'] . "'"; }
|
||||||
|
if (isset($_GET['s'])) { $FOCUS = $_GET['s'] ; }
|
||||||
|
else { $FOCUS = "all"; }
|
||||||
|
|
||||||
|
if ($FOCUS=="sp22") { $MY_TITLE = "Spring 22 Flex Days"; }
|
||||||
|
if ($FOCUS=="fa22") { $MY_TITLE = "Fall 22 Convocation - All Activities"; }
|
||||||
|
if ($FOCUS=="sp23") { $MY_TITLE = "Spring 23 Flex Days"; }
|
||||||
|
if ($FOCUS=="fa23") { $MY_TITLE = "Fall 2023 Convocation Day"; }
|
||||||
|
if ($FOCUS=="sp24") { $MY_TITLE = "Spring 24 Flex Days"; }
|
||||||
|
if ($FOCUS=="fa24") { $MY_TITLE = "Fall 2024 Convocation Day"; }
|
||||||
|
if ($FOCUS=="sp25") { $MY_TITLE = "Spring 2025 Flex Days"; }
|
||||||
|
if ($FOCUS=="fa25") { $MY_TITLE = "Fall 2025 Convocation Day"; }
|
||||||
|
|
||||||
|
|
||||||
|
$CRUMB_START = "<a href='index.php'>Convocation and Flex Days</a> > ";
|
||||||
|
|
@ -0,0 +1,160 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
// _____ _____ _ _ _____ _ ______ _ ____ _ _
|
||||||
|
// / ____|_ _| \ | |/ ____| | | ____| (_) / __ \| \ | |
|
||||||
|
// | (___ | | | \| | | __| | | |__ ___ _ __ _ _ __ | | | | \| |
|
||||||
|
// \___ \ | | | . ` | | |_ | | | __| / __| |/ _` | '_ \ | | | | . ` |
|
||||||
|
// ____) |_| |_| |\ | |__| | |____| |____ \__ \ | (_| | | | | | |__| | |\ |
|
||||||
|
// |_____/|_____|_| \_|\_____|______|______| |___/_|\__, |_| |_| \____/|_| \_|
|
||||||
|
// __/ |
|
||||||
|
// |___/
|
||||||
|
// SSO
|
||||||
|
//
|
||||||
|
// Set GLOBAL VARS corresponding to current logged in user.
|
||||||
|
// They may only edit their own dir info.
|
||||||
|
//
|
||||||
|
|
||||||
|
date_default_timezone_set('America/Los_Angeles');
|
||||||
|
|
||||||
|
// 3. Check if an entry exists
|
||||||
|
function does_exist($qry, $full_record) { global $c;
|
||||||
|
$r = mysqli_query($c, $qry);
|
||||||
|
$a = mysqli_num_rows($r);
|
||||||
|
if (! $a ) { return 0; }
|
||||||
|
$row = mysqli_fetch_array($r, MYSQLI_NUM);
|
||||||
|
$id = $row[0]; // getting the id of that which exists... assuming first column has it.
|
||||||
|
$e = mysqli_error($c); if($e) { d_err("sql error: " . $e); }
|
||||||
|
if ($a && $full_record) { return $row; } if ($a) { return $id; } return 0; }
|
||||||
|
|
||||||
|
|
||||||
|
function dumpit($var) {
|
||||||
|
ob_start();
|
||||||
|
var_dump($var);
|
||||||
|
$a=ob_get_contents();
|
||||||
|
ob_end_clean();
|
||||||
|
$a = preg_replace('~[\r\n]+~', '', $a);
|
||||||
|
return $a;
|
||||||
|
}
|
||||||
|
|
||||||
|
function insert_or_get_browser($b) {
|
||||||
|
global $c;
|
||||||
|
$BROWSER = ok($b);
|
||||||
|
$existing = does_exist( "SELECT id FROM www_browsers WHERE string='$BROWSER'", 0);
|
||||||
|
if ($existing) { return $existing;
|
||||||
|
} else {
|
||||||
|
$q = "INSERT INTO www_browsers (string) VALUES ('$BROWSER')";
|
||||||
|
single_row_insert($q,0,$c);
|
||||||
|
return does_exist( "SELECT id FROM www_browsers WHERE string='$BROWSER'",0,$c); } }
|
||||||
|
|
||||||
|
|
||||||
|
// //
|
||||||
|
// // Log everything!
|
||||||
|
function log_it($action, $user=860) {
|
||||||
|
global $USER, $USER_NAME, $USER_GOO, $USER_EMAIL, $c;
|
||||||
|
|
||||||
|
if (! $USER) {
|
||||||
|
$USER = array( 'user_id'=>'unknown', 'id'=>-1 ); }
|
||||||
|
$user_browser = $_SERVER['HTTP_USER_AGENT'];
|
||||||
|
$user_ip = $_SERVER['REMOTE_ADDR'];
|
||||||
|
|
||||||
|
$BROWSER = insert_or_get_browser($user_browser);
|
||||||
|
$ACTION = ok($action) . " / " . dumpit($USER) . " / " . $USER_GOO . " / " . $USER_EMAIL;
|
||||||
|
|
||||||
|
//$persid = $USER->id;
|
||||||
|
//if (! $persid) { $persid = -1; }
|
||||||
|
$qupdate = "INSERT INTO gavi_logs SET personnel_id='{$user}', action='{$ACTION}',name='{$USER_NAME}',browser=$BROWSER, ip='$user_ip'";
|
||||||
|
//print_r($qupdate);
|
||||||
|
single_row_insert($qupdate,0,$c);
|
||||||
|
return array("result"=>"success","action"=>"logged","query"=>$qupdate,"err"=>mysqli_error($c)); }
|
||||||
|
|
||||||
|
/*session_destroy();
|
||||||
|
echo "ending session";
|
||||||
|
exit();
|
||||||
|
*/
|
||||||
|
|
||||||
|
$auth_script = "mAuth.php";
|
||||||
|
|
||||||
|
if (file_exists($auth_script)) {
|
||||||
|
require_once($auth_script);
|
||||||
|
$USER_TYPE = $attributes['Roles'][0];
|
||||||
|
$USER_GOO = $attributes['uid'][0];
|
||||||
|
$USER_EMAIL = $attributes['EmailGC'][0];
|
||||||
|
|
||||||
|
session_start();
|
||||||
|
$SESSION_ID = session_id();
|
||||||
|
//if ( $SESSION_ID == '' ) { // session_status() == PHP_SESSION_ACTIVE // newer php uses this
|
||||||
|
if ( session_status() == PHP_SESSION_ACTIVE ) { // // newer php uses this
|
||||||
|
$_SESSION['USER_TYPE'] = $USER_TYPE;
|
||||||
|
$_SESSION['USER_GOO'] = $USER_GOO;
|
||||||
|
$_SESSION['USER_EMAIL'] = $USER_EMAIL;
|
||||||
|
log_it("Logged in Session id: {$SESSION_ID} / {$USER_NAME} / {$USER_EMAIL} / {$USER_GOO}");
|
||||||
|
} else { // already logged in....
|
||||||
|
$USER_TYPE = $_SESSION['USER_TYPE'];
|
||||||
|
$USER_GOO = $_SESSION['USER_GOO'];
|
||||||
|
$USER_EMAIL = $_SESSION['USER_EMAIL'];
|
||||||
|
log_it("Already logged in: Session id: {$SESSION_ID} / {$USER_NAME} / {$USER_EMAIL} / {$USER_GOO}");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Handle the error if the file doesn't exist
|
||||||
|
$USER_TYPE = 'FACULTY'; $USER_GOO = 'G00102586'; $USER_EMAIL = 'phowell@my.gavilan.edu';
|
||||||
|
session_start();
|
||||||
|
$_SESSION['USER_TYPE'] = $USER_TYPE;
|
||||||
|
$_SESSION['USER_GOO'] = $USER_GOO;
|
||||||
|
$_SESSION['USER_EMAIL'] = $USER_EMAIL;
|
||||||
|
}
|
||||||
|
// The SSO check should have happened on the actual page. If it gets
|
||||||
|
// stuck on an api call the app will break.
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// SSO Given email is inconsistent. Lookup by GOO
|
||||||
|
//
|
||||||
|
$goo = substr($USER_GOO, 3);
|
||||||
|
$q0 = "SELECT email,name,id FROM conf_users WHERE goo='{$goo}'";
|
||||||
|
//echo $q0;
|
||||||
|
$temp_usr = single_row_select($q0,0);
|
||||||
|
$USER_NAME = '';
|
||||||
|
|
||||||
|
// Is this a "MISSING USER?" Create an account for them.
|
||||||
|
if (is_null($temp_usr)) {
|
||||||
|
$LC_EMAIL = strtolower($USER_EMAIL);
|
||||||
|
$result = single_row_insert("INSERT INTO conf_users (goo, email, name) VALUES ('{$goo}','{$LC_EMAIL}','{$USER_NAME}');");
|
||||||
|
//echo "INSERT INTO conf_users (goo, email, name) VALUES ('{$goo}','{$LC_EMAIL}','{$USER_NAME}');";
|
||||||
|
//print_r($result);
|
||||||
|
$USER_NAME = $temp_usr['name'];
|
||||||
|
$USER_EMAIL = strtolower($temp_usr['email']);
|
||||||
|
|
||||||
|
// Set the $USER global
|
||||||
|
$usr_qry = "SELECT id AS conf_id, goo AS conf_goo, email AS conf_email, name AS conf_name, active AS conf_active FROM conf_users WHERE goo='{$goo}'";
|
||||||
|
$USER = single_row_select($usr_qry, 0);
|
||||||
|
|
||||||
|
$logaction = log_it("Made a new conf_users row for {$USER_NAME} / {$LC_EMAIL} / {$USER_GOO}", $result);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
$USER_NAME = $temp_usr['name'];
|
||||||
|
$USER_EMAIL = strtolower($temp_usr['email']);
|
||||||
|
|
||||||
|
// Set the $USER global
|
||||||
|
$usr_qry = "SELECT id AS conf_id, goo AS conf_goo, email AS conf_email, name AS conf_name, active AS conf_active FROM conf_users WHERE goo='{$goo}'";
|
||||||
|
$USER = single_row_select($usr_qry, 0);
|
||||||
|
|
||||||
|
$logaction = log_it("Successful conf_users lookup for {$temp_usr['name']}", $temp_usr['id']);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
// Check again for missing user entry. Create an account for them.
|
||||||
|
if (is_null($USER)) {
|
||||||
|
$LC_EMAIL = strtolower($USER_EMAIL);
|
||||||
|
$goo = substr($USER_GOO, 3);
|
||||||
|
$USER_NAME = '';
|
||||||
|
$result = single_row_insert("INSERT INTO conf_users (goo, email, name) VALUES ('{$goo}','{$LC_EMAIL}','{$USER_NAME}');");
|
||||||
|
//echo "INSERT INTO conf_users (goo, email, name) VALUES ('{$goo}','{$LC_EMAIL}','{$USER_NAME}');";
|
||||||
|
//print_r($result);
|
||||||
|
//$logaction = log_it("Made a new conf_users row for {$USER_NAME} / {$LC_EMAIL} / {$USER_GOO}");
|
||||||
|
$usr_qry = "SELECT id AS conf_id, goo AS conf_goo, email AS conf_email, name AS conf_name, active AS conf_active FROM conf_users WHERE LOWER(email)='{$USER_EMAIL}'";
|
||||||
|
$USER = single_row_select($usr_qry, 0);
|
||||||
|
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
.clickme, .clicky {cursor: pointer;}
|
||||||
|
|
||||||
|
.pell{
|
||||||
|
border:1px solid hsla(0,0%,4%,.1)
|
||||||
|
}
|
||||||
|
.pell,.pell-content{
|
||||||
|
box-sizing:border-box
|
||||||
|
}
|
||||||
|
.pell-content{
|
||||||
|
height:300px;
|
||||||
|
outline:0;
|
||||||
|
overflow-y:auto;
|
||||||
|
padding:10px
|
||||||
|
}
|
||||||
|
.pell-actionbar{
|
||||||
|
background-color:#fff;
|
||||||
|
border-bottom:1px solid hsla(0,0%,4%,.1)
|
||||||
|
}
|
||||||
|
.pell-button{
|
||||||
|
background-color:transparent;
|
||||||
|
border:none;
|
||||||
|
cursor:pointer;
|
||||||
|
height:30px;
|
||||||
|
outline:0;
|
||||||
|
width:30px;
|
||||||
|
vertical-align:bottom
|
||||||
|
}
|
||||||
|
.pell-button-selected{
|
||||||
|
background-color:#f0f0f0
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
<?php
|
||||||
|
$MY_TITLE = "Survey";
|
||||||
|
$MY_CRUMB = "Activities";
|
||||||
|
|
||||||
|
if (isset($_GET['s'])) { $FOCUS = $_GET['s'] ; }
|
||||||
|
else { $FOCUS = "all"; }
|
||||||
|
|
||||||
|
|
||||||
|
$CONTENT = '<asksurvey :id="' . $FOCUS . '"></asksurvey>';
|
||||||
|
include 'layout.php';
|
||||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue