From 87410d5f09c6640090a35a65cd3e11c1962466f9 Mon Sep 17 00:00:00 2001 From: Coding with Peter Date: Mon, 22 Jan 2024 17:49:39 -0800 Subject: [PATCH] fix login to use goo --- api2.php | 93 +-------- dir_api.php | 472 ++++++++++++++------------------------------- graf/bird2024.png | Bin 0 -> 18447 bytes js/dir_app.js | 24 +-- semester.php | 1 + single_sign_on.php | 106 ++++++++++ 6 files changed, 267 insertions(+), 429 deletions(-) create mode 100644 graf/bird2024.png create mode 100644 single_sign_on.php diff --git a/api2.php b/api2.php index f73444d..c14d7b1 100644 --- a/api2.php +++ b/api2.php @@ -1,6 +1,6 @@ - - $_REQUEST['vals'], "result"=>"success","action"=>"updated", "query"=>$q,"err"=>mysqli_error($c2))); + 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(); diff --git a/dir_api.php b/dir_api.php index 21eb3f3..791b91f 100644 --- a/dir_api.php +++ b/dir_api.php @@ -11,48 +11,30 @@ $DEBUG = 0; // \__|_| |_|\___| |_____/_/ \_\_/_/ \_\_.__/ \__,_|___/\___| // // -// DATABASE -// -// Yes, there's two different databases. -// -// $c = gavi_db -// $c2 = PeterDB -// -// Why? Just to keep you on your toes. -// -// also, there's 3 different tables that have people/users. Why? Reasons. Which mostly no longer apply. -// I recommend combining conf_users and gavi_personnel_ext so at least there's -// one less opportunity to get out of sync. -// // // The $j argument is true for a json result, or false for a raw db object result. // -$TESTSITE = 1; +$TESTSITE = 1; if ($TESTSITE) { - $DBServer = '192.168.1.6'; $DBUser = 'phowell'; - $DBPass = 'rolley34'; $DBName = 'db'; - - $DBUser2 = 'phowell'; + $DBUser2 = 'phowell'; $DBServer = '192.168.1.6'; $DBPass2 = 'rolley34'; $DBName2 = 'db'; } else { - $DBServer = 'localhost'; $DBUser = 'www'; - $DBPass = '@$df'; $DBName = 'gavi_db'; - - $DBUser2 = 'phowell'; + $DBUser2 = 'phowell'; $DBServer = 'localhost'; $DBPass2 = 'p^howell'; $DBName2 = 'PeterDB'; } +/* # not using www account anymore $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"); } +*/ -$c2 = new mysqli($DBServer, $DBUser2, $DBPass2, $DBName2); -if ($c2->connect_error) { die('Database connection failed: ' . $c2->connect_error ); } -if (!mysqli_select_db($c2, $DBName2)) { die("Uh oh, couldn't select database 'PeterDB'"); } +$c = new mysqli($DBServer, $DBUser2, $DBPass2, $DBName2); +if ($c->connect_error) { die('Database connection failed: ' . $c->connect_error ); } +if (!mysqli_select_db($c, $DBName2)) { die("Uh oh, couldn't select database 'PeterDB'"); } mysqli_set_charset($c, 'utf8'); -mysqli_set_charset($c2, 'utf8'); include('underscore.php'); $_ = new __(); @@ -82,18 +64,18 @@ function logout() { session_destroy(); } $server = $_SERVER['SERVER_NAME']; $options_query = "SELECT label,value FROM `conf_uinforecord` WHERE id>1"; -$options_array = multi_row_select($options_query, 0, $c2); +$options_array = multi_row_select($options_query, 0); $OPTIONS = array_reduce($options_array, function ($result, $item) { $result[$item["label"]] = $item["value"]; return $result; }, array()); $default_ay_query = "SELECT begin,end FROM conf_academicyears ca JOIN conf_uinforecord cu ON cu.value=ca.id WHERE cu.label='default_ay';"; -$AY = single_row_select($default_ay_query,0, $c2); +$AY = single_row_select($default_ay_query,0); $OPTIONS['year'] = $AY; $conf_query = "SELECT semester,date1,date2,title FROM conf_conferences cc JOIN conf_uinforecord cu ON cu.value=cc.id WHERE cu.label='default_conference';"; -$CONF = single_row_select($conf_query,0, $c2); +$CONF = single_row_select($conf_query,0); $OPTIONS['conf'] = $CONF; @@ -109,7 +91,7 @@ function name_to_file($fn,$ln) { // 1. lookups, like a username -function single_row_select($qry, $j, $c) { +function single_row_select($qry, $j) { 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; } @@ -119,7 +101,7 @@ function single_row_select($qry, $j, $c) { if (! $j) { return $a; } return json_encode($a); } // 1a. inserts -function single_row_insert($qry, $j, $c) { +function single_row_insert($qry, $j) { global $c; $r = mysqli_query($c, $qry); //d_err($qry); //$e = mysqli_error($c); if($e) { d_err("sql error: " . $e ); } @@ -131,25 +113,25 @@ function single_row_insert($qry, $j, $c) { if (! $j) { return $a; } return json_encode($a); } */ // 1b. updates -function single_row_update($qry, $j, $c) { +function single_row_update($qry, $j) { global $c; $r = mysqli_query($c, $qry); return 1; } // 2. grid or fancier joins, like get all sessions, rosters, todos, etc -function multi_row_select($qry, $j, $db) { +function multi_row_select($qry, $j) { global $c; $rows = array(); - $result = mysqli_query($db, $qry); + $result = mysqli_query($c, $qry); while($r = mysqli_fetch_assoc($result)) { $rows[] = $r; } if (! $j) { return $rows; } return json_encode( $rows); } // 3. Check if an entry exists -function does_exist($qry, $full_record, $db) { global $c, $c2; - $r = mysqli_query($db, $qry); +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($db); if($e) { d_err("sql error: " . $e); } + $e = mysqli_error($c); if($e) { d_err("sql error: " . $e); } if ($a && $full_record) { return $row; } if ($a) { return $id; } return 0; } @@ -160,14 +142,14 @@ function does_exist($qry, $full_record, $db) { global $c, $c2; // // // // Enter or get browser log entry function insert_or_get_browser($b) { - global $c2; + global $c; $BROWSER = ok($b); - $existing = does_exist( "SELECT id FROM www_browsers WHERE string='$BROWSER'", 0, $c2); + $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,$c2); - return does_exist( "SELECT id FROM www_browsers WHERE string='$BROWSER'",0,$c2); } } + single_row_insert($q,0,$c); + return does_exist( "SELECT id FROM www_browsers WHERE string='$BROWSER'",0,$c); } } function dumpit($var) { ob_start(); @@ -176,25 +158,6 @@ function dumpit($var) { ob_end_clean(); return $a; } -// // -// // Log everything! -function log_it($action) { - global $USER, $USER_GOO, $USER_EMAIL, $c2; - //echo("\n\n\n"); - - 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 action='{$ACTION}', " /*personnel_id='{$persid}',name='{$USER->user_id}', */ . "browser=$BROWSER, ip='$user_ip'"; - single_row_insert($qupdate,0,$c2); - return array("result"=>"success","action"=>"logged","query"=>$qupdate,"err"=>mysqli_error($c2)); } // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // @@ -248,151 +211,8 @@ function check_dir_photo($fn,$ln) { global $USER; -///// -///// -// -// Insert new user -// -// For whatever reason, we haven't seen this person before. Insert their conf_user row -// so they can have their choices recorded. -// -function insert_new_user() { global $USER, $USER_EMAIL, $USER_GOO, $USER_NAME, $USER_PERS_ID, $USER_CONF_U_ID, $USER_PERS_EXT_ID, $c, $c2; - $LC_EMAIL = strtolower($USER_EMAIL); - single_row_insert("INSERT INTO conf_users (goo, email, name) VALUES ('{$USER_GOO}','{$LC_EMAIL}','{$USER_NAME}');", 1, $c2); - $logaction = log_it("Made a new conf_users row for {$USER_NAME} / {$LC_EMAIL} / {$USER_GOO}"); -} - - -// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // -// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // -// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // -// -// Fetching a person's records -// -// 1. use their email to lookup PERSONNEL -// - basic directory info -// -// 2. use their email to lookup CONF_USERS -// - flex app, workshop signups -// -// 3. use conf_users.id to lookup in gavi_personnel_ext.c_users -// - goo, depts, job title, image active -// -// 4. use personnel.id to lookup [webpages, welcomepages, etc] -// -// -// Ultimately the user's data goes into the global $USER - -function user_record() { global $USER, $USER_EMAIL, $USER_GOO, $USER_NAME, $USER_PERS_ID, $USER_CONF_U_ID, $USER_PERS_EXT_ID, $c, $c2; - $LC_EMAIL = strtolower($USER_EMAIL); - - if (! $USER_EMAIL) { - $goo = substr($USER_GOO, 3); - $q0 = "SELECT email FROM conf_users WHERE goo='{$goo}'"; - $temp_usr = single_row_select($q0,0,$c2); - - if (is_null($temp_usr)) { - // we have a new user here... - // and the missing email might be a problem.... - insert_new_user(); - } - //echo($goo); - //print_r($temp_usr); - //echo($temp_usr->email); - //echo("\n"); - $LC_EMAIL = strtolower($temp_usr['email']); - } - - $usr_check = single_row_select("SELECT id FROM conf_users WHERE LOWER(email)='{$LC_EMAIL}';",0,$c2); - if (is_null($usr_check)) { - // we have a new user here... - insert_new_user(); - } - - //$q1 = "SELECT last_name, first_name, department, extension, phone_number, email, room, user_id, time_updated, id, web_on, status FROM personnel WHERE LOWER(email)='{$LC_EMAIL}'"; - //$usr_dir = single_row_select($q1, 0, $c); - - $q2 = "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)='{$LC_EMAIL}'"; - $USER = single_row_select($q2, 0, $c2); - //$mega = $_->extend( (object) $usr_dir, (object) $usr_conf ); - - //$q3 = 'SELECT id AS ext_id, personnel AS personnel_id, role, goo_short, c_users AS c_users_id_ext, ilearn_id, sched_alias, dept1, dept2, gtitle, active, use_dir_photo, general_photo_release, etc, espanol, zoom, preferred_contact FROM gavi_personnel_ext WHERE personnel=' . $mega->id . ';'; // c_users={$mega->conf_id}'; - //$usr_ext = single_row_select($q3,0,$c2); - //$mega = $_->extend( (object) $mega, (object) $usr_ext ); - - //$q4 = 'SELECT person, officehours, title, picture, education, bio, courses, personal_page, changed FROM webpages WHERE person=' . $mega->id . ';'; // '{$mega->id}'"; // personnel=1'); - //$usr_web = single_row_select($q4,0,$c); - //$mega = $_->extend( (object) $mega, (object) $usr_web ); - //$USER = $mega; - } - - - - - - -// _____ _____ _ _ _____ _ ______ _ ____ _ _ -// / ____|_ _| \ | |/ ____| | | ____| (_) / __ \| \ | | -// | (___ | | | \| | | __| | | |__ ___ _ __ _ _ __ | | | | \| | -// \___ \ | | | . ` | | |_ | | | __| / __| |/ _` | '_ \ | | | | . ` | -// ____) |_| |_| |\ | |__| | |____| |____ \__ \ | (_| | | | | | |__| | |\ | -// |_____/|_____|_| \_|\_____|______|______| |___/_|\__, |_| |_| \____/|_| \_| -// __/ | -// |___/ -// SSO -// -// Set GLOBAL VARS corresponding to current logged in user. -// They may only edit their own dir info. -// - - - - -if ( $server == 'intranet1.gavilan.edu' ) { // The SSO check should have happened on the actual page. If it gets -// // stuck on an api call the app will break. - if ( session_id() == '' ) { // session_status() == PHP_SESSION_ACTIVE // newer php uses this - require 'mAuth.php'; - $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]; - ?> - - first_name, $USER->last_name); - } - -// -// -// -// - - - - +include('single_sign_on.php'); @@ -504,20 +324,20 @@ function check_permission( $acting_user, $target_id, $table ) { // Helper tables // // JOB TITLES LIST -function job_titles() { global $c2; - return multi_row_select("SELECT DISTINCT id, name FROM gavi_titles ORDER BY name",1, $c2); } +function job_titles() { global $c; + return multi_row_select("SELECT DISTINCT id, name FROM gavi_titles ORDER BY name",1, $c); } if (isset($_REQUEST['a']) && $_REQUEST['a']=='get/jobtitles') { echo job_titles(); exit(); } // all SUB MENUS // -function sub_menus() { global $c2; - $ddd = multi_row_select('SELECT * FROM gavi_departments ORDER BY name',0, $c2); - $ttt = multi_row_select('SELECT * FROM gavi_titles ORDER BY name',0, $c2); - $rrr = multi_row_select("SELECT * FROM gavi_roles ORDER BY 'descr'",0, $c2); - $ccc = multi_row_select('SELECT * FROM gavi_committees ORDER BY name',0, $c2); - $sss = multi_row_select('SELECT * FROM conf_sessiontypes ORDER BY id',0, $c2); - $ppp = multi_row_select("SELECT * FROM `conf_sessions` WHERE `type` = '20' OR `type` = '21' ORDER BY starttime",0, $c2); +function sub_menus() { global $c; + $ddd = multi_row_select('SELECT * FROM gavi_departments ORDER BY name',0, $c); + $ttt = multi_row_select('SELECT * FROM gavi_titles ORDER BY name',0, $c); + $rrr = multi_row_select("SELECT * FROM gavi_roles ORDER BY 'descr'",0, $c); + $ccc = multi_row_select('SELECT * FROM gavi_committees ORDER BY name',0, $c); + $sss = multi_row_select('SELECT * FROM conf_sessiontypes ORDER BY id',0, $c); + $ppp = multi_row_select("SELECT * FROM `conf_sessions` WHERE `type` = '20' OR `type` = '21' ORDER BY starttime",0, $c); return json_encode( array( 'departments'=>$ddd, 'titles'=>$ttt, 'roles'=>$rrr, 'committees'=>$ccc, 'sessiontypes'=>$sss, 'parents'=>$ppp ) ); } @@ -528,9 +348,9 @@ if (isset($_REQUEST['a']) && $_REQUEST['a']=='menus') { echo sub_menus(); exit() // all NAMES // function get_names() { - global $c2, $AY, $USER; + global $c, $AY, $USER; $q = "SELECT u.id, u.name FROM conf_users AS u ORDER BY u.name"; - echo json_encode( array("users"=>multi_row_select($q,0,$c2), "result"=>"success","err"=>mysqli_error($c2))); + echo json_encode( array("users"=>multi_row_select($q,0,$c), "result"=>"success","err"=>mysqli_error($c))); exit(); } if (isset($_GET['a']) && $_GET['a'] == 'get/names') { get_names(); } @@ -539,8 +359,8 @@ if (isset($_GET['a']) && $_GET['a'] == 'get/names') { get_names(); } // get most RECENT LOGS // function get_recent_logs() { - global $c2, $USER; - $my_sessions = multi_row_select("SELECT * FROM `gavi_logs` ORDER BY `id` DESC LIMIT 150",0,$c2); + global $c, $USER; + $my_sessions = multi_row_select("SELECT * FROM `gavi_logs` ORDER BY `id` DESC LIMIT 150",0,$c); echo json_encode($my_sessions); exit(); } if (isset($_GET['a']) && $_GET['a'] == 'get/logs') { get_recent_logs(); } @@ -549,7 +369,7 @@ if (isset($_GET['a']) && $_GET['a'] == 'get/logs') { get_recent_logs(); } // gavilan college EVENTS // function get_events() { global $c; - echo json_encode( multi_row_select("SELECT * FROM events WHERE date >= CURDATE() AND visible='1' ORDER BY time LIMIT 6;",0, $c)); } + echo json_encode( multi_row_select("SELECT * FROM events WHERE date >= CURDATE() AND visible='1' ORDER BY time LIMIT 6;",0)); } if (isset($_GET['a']) && $_GET['a'] == 'get/gavevents') { get_events(); exit(); } @@ -628,8 +448,8 @@ if (isset($_REQUEST['a']) && $_REQUEST['a']=='signups') { // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // Courses in a semester -function semester_sections() { global $c2; - return multi_row_select("SELECT * FROM `gavi_sections` s WHERE s.sem='fa21' ORDER BY s.teacher_id",1, $c2); } +function semester_sections() { global $c; + return multi_row_select("SELECT * FROM `gavi_sections` s WHERE s.sem='fa21' ORDER BY s.teacher_id",1, $c); } if (isset($_REQUEST['a']) && $_REQUEST['a']=='list/semester') { echo semester_sections(); exit(); } @@ -658,16 +478,16 @@ if (isset($_REQUEST['a']) && $_REQUEST['a']=='list/staffsemester') { // // SEARCH AN INSTRUCTOR BY NAME IN SCHEDULE // -function get_instructor() { global $c2; +function get_instructor() { global $c; $i = ok($_REQUEST['inst']); - echo json_encode( single_row_select("SELECT * FROM gavi_personnel_ext WHERE sched_alias='{$i}';",0, $c2)); + echo json_encode( single_row_select("SELECT * FROM gavi_personnel_ext WHERE sched_alias='{$i}';",0)); exit(); } if (isset($_REQUEST['a']) && $_REQUEST['a'] == 'get/instructor/name' ) { get_instructor(); } function get_instructor_fuzzy() { - global $c2; + global $c; $i = ok($_REQUEST['inst']); - echo json_encode( single_row_select("SELECT * FROM gavi_personnel_ext WHERE sched_alias LIKE '{$i}';",0, $c2)); + echo json_encode( single_row_select("SELECT * FROM gavi_personnel_ext WHERE sched_alias LIKE '{$i}';",0)); exit(); } if (isset($_REQUEST['a']) && $_REQUEST['a'] == 'get/instructor/fuzzyname' ) { get_instructor_fuzzy(); } @@ -678,7 +498,7 @@ if (isset($_REQUEST['a']) && $_REQUEST['a'] == 'get/instructor/fuzzyname' ) { ge // function get_sections($semester) { global $c; $semester = ok($semester); - return multi_row_select("SELECT s.id,s.code,s.name,s.descr,s.teacher_id,s.days,s.start_date,s.end_date,s.units,s.ztc,s.location,s.delivery,s.status,s.pnp,s.note,s.crn,s.sem,p.personnel AS personnel_id,p.use_dir_photo,p.dir_photo_path,d.last_name,d.first_name,d.phone_number,d.email,d.room,d.web_on,s.sem FROM PeterDB.gavi_sections s LEFT JOIN PeterDB.gavi_personnel_ext p ON s.teacher_id=p.id LEFT JOIN personnel d ON d.id=p.personnel WHERE sem='{$semester}' ORDER BY code;",0, $c); } + return multi_row_select("SELECT s.id,s.code,s.name,s.descr,s.teacher_id,s.days,s.start_date,s.end_date,s.units,s.ztc,s.location,s.delivery,s.status,s.pnp,s.note,s.crn,s.sem,p.personnel AS personnel_id,p.use_dir_photo,p.dir_photo_path,d.last_name,d.first_name,d.phone_number,d.email,d.room,d.web_on,s.sem FROM PeterDB.gavi_sections s LEFT JOIN PeterDB.gavi_personnel_ext p ON s.teacher_id=p.id LEFT JOIN personnel d ON d.id=p.personnel WHERE sem='{$semester}' ORDER BY code;",0); } if (isset($_REQUEST['a']) && preg_match('/^get\/sections\/(\w\w\d\d)$/', $_REQUEST['a'], $matches)) { echo json_encode( get_sections( $matches[1] ) ); exit(); } @@ -687,7 +507,7 @@ if (isset($_REQUEST['a']) && preg_match('/^get\/sections\/(\w\w\d\d)$/', $_REQUE // all COURSE SECTIONS by semester and crn only // function get_all_sections() { global $c; - echo json_encode( multi_row_select("SELECT s.id,s.code,s.crn,s.sem,s.teacher_id,s.delivery,s.status,p.personnel AS personnel_id,d.last_name,d.first_name FROM PeterDB.gavi_sections s LEFT JOIN PeterDB.gavi_personnel_ext p ON s.teacher_id=p.id LEFT JOIN personnel d ON d.id=p.personnel ORDER BY sem,code;",0, $c)); + echo json_encode( multi_row_select("SELECT s.id,s.code,s.crn,s.sem,s.teacher_id,s.delivery,s.status,p.personnel AS personnel_id,d.last_name,d.first_name FROM PeterDB.gavi_sections s LEFT JOIN PeterDB.gavi_personnel_ext p ON s.teacher_id=p.id LEFT JOIN personnel d ON d.id=p.personnel ORDER BY sem,code;",0)); exit(); } if (isset($_REQUEST['a']) && $_REQUEST['a'] == 'get/sections') { get_all_sections(); } @@ -700,7 +520,7 @@ if (isset($_REQUEST['a']) && $_REQUEST['a'] == 'get/sections') { get_all_section // function get_instructor_sections($teacherid) { global $c; - echo json_encode( multi_row_select("SELECT s.id,s.code,s.name,s.descr,s.teacher_id,s.days,s.times,s.link,s.start_date,s.end_date,s.units,s.ztc,s.location,s.delivery,s.xlist_to,s.status,s.pnp,s.note,s.crn,s.sem,s.year FROM PeterDB.gavi_sections s WHERE s.teacher_id='{$teacherid}' ORDER BY s.sem,s.code;",0, $c)); + echo json_encode( multi_row_select("SELECT s.id,s.code,s.name,s.descr,s.teacher_id,s.days,s.times,s.link,s.start_date,s.end_date,s.units,s.ztc,s.location,s.delivery,s.xlist_to,s.status,s.pnp,s.note,s.crn,s.sem,s.year FROM PeterDB.gavi_sections s WHERE s.teacher_id='{$teacherid}' ORDER BY s.sem,s.code;",0)); exit(); } if (isset($_REQUEST['a']) && preg_match('/^get\/sections\/(\d+)$/', $_REQUEST['a'], $matches)) { get_instructor_sections( $matches[1] ); } @@ -714,19 +534,19 @@ if (isset($_REQUEST['a']) && preg_match('/^get\/sections\/(\d+)$/', $_REQUEST['a // // function get_section($sem,$crn) { - global $c, $c2; + global $c, $c; $sem = ok($sem); $crn = ok($crn); $sched_id = 0; - $sched_entry = single_row_select( "SELECT * FROM PeterDB.gavi_sections gs WHERE sem='{$sem}' AND crn='{$crn}';",0, $c2); + $sched_entry = single_row_select( "SELECT * FROM PeterDB.gavi_sections gs WHERE sem='{$sem}' AND crn='{$crn}';",0); if ($sched_entry) { $sched_id = $sched_entry['id']; } else { echo json_encode( array( "result"=>"fail", "reason"=>"no row for that section {$sem} {$crn}.") ); exit(); } - $wl_entry = single_row_select( "SELECT s.id,s.code,s.name,s.descr,s.teacher_id,s.days,s.start_date,s.end_date,s.units,s.ztc,s.location,s.delivery,s.status,s.pnp,s.note,s.crn,s.sem,w.id AS wl_id,w.photo_path,w.format,w.length,w.course_desc,w.what_expect,w.assessments,w.textbook,w.other_info,w.introduction,w.additional_resources FROM PeterDB.gavi_welcome_letters w LEFT JOIN PeterDB.gavi_sections s ON w.section_id=s.id WHERE w.section_id='{$sched_id}';",0, $c2); + $wl_entry = single_row_select( "SELECT s.id,s.code,s.name,s.descr,s.teacher_id,s.days,s.start_date,s.end_date,s.units,s.ztc,s.location,s.delivery,s.status,s.pnp,s.note,s.crn,s.sem,w.id AS wl_id,w.photo_path,w.format,w.length,w.course_desc,w.what_expect,w.assessments,w.textbook,w.other_info,w.introduction,w.additional_resources FROM PeterDB.gavi_welcome_letters w LEFT JOIN PeterDB.gavi_sections s ON w.section_id=s.id WHERE w.section_id='{$sched_id}';",0); if ($wl_entry) { echo json_encode($wl_entry); @@ -745,11 +565,11 @@ function get_section($sem,$crn) { $default->additional_resources = okh($default->additional_resources); $q = "INSERT INTO PeterDB.gavi_welcome_letters (section_id,format,length,text_title,course_desc,what_expect,assessments,textbook,other_info,introduction,additional_resources) VALUES ('{$sched_id}', '', '', '', '', '{$default->what_expect}', '{$default->assessments}', '{$default->textbook}', '{$default->other_info}', '{$default->introduction}', '{$default->additional_resources}');"; - $new_id = single_row_insert($q,0,$c2); + $new_id = single_row_insert($q,0,$c); $q4 = "SELECT s.id,s.code,s.name,s.descr,s.teacher_id,s.days,s.start_date,s.end_date,s.units,s.ztc,s.location,s.delivery,s.status,s.pnp,s.note,s.crn,s.sem,w.id AS wl_id, w.photo_path,w.format,w.length,w.course_desc,w.what_expect,w.assessments,w.textbook,w.other_info,w.introduction,w.additional_resources FROM PeterDB.gavi_welcome_letters w LEFT JOIN PeterDB.gavi_sections s ON w.section_id=s.id WHERE w.id=" . $new_id . ";"; - $wl_entry = single_row_select( $q4, 0, $c2); + $wl_entry = single_row_select( $q4, 0); echo json_encode($wl_entry); exit(); } } @@ -764,7 +584,7 @@ if (isset($_REQUEST['a']) && preg_match('/^get\/section\/(\w\w\d\d)\/(\d+)$/', $ // // update a course section record /*function update_section($update=1) { - global $USER, $c2; + global $USER, $c; $WHERECLAUSE = ""; $START = "INSERT INTO gavi_sections SET "; $action = "inserted"; @@ -789,9 +609,9 @@ if (isset($_REQUEST['a']) && preg_match('/^get\/section\/(\w\w\d\d)\/(\d+)$/', $ $q = substr($q, 0, -2); $q .= $WHERECLAUSE; - single_row_insert($q,0,$c2); + single_row_insert($q,0,$c); echo json_encode( array("rawvalstr"=>$_REQUEST['vals'], "result"=>"success","action"=>$action, - "logaction"=>$logaction, "query"=>$q,"err"=>mysqli_error($c2))); + "logaction"=>$logaction, "query"=>$q,"err"=>mysqli_error($c))); exit(); } @@ -808,7 +628,7 @@ if (isset($_REQUEST['a']) && $_REQUEST['a']=='add/section') { update_section(0); // update a WELCOME LETTER // /*function update_welcome_letter($update=1) { - global $USER, $c2, $_; + global $USER, $c, $_; $WHERECLAUSE = ""; $START = "INSERT INTO gavi_welcome_letters SET "; $action = "inserted"; @@ -833,9 +653,9 @@ if (isset($_REQUEST['a']) && $_REQUEST['a']=='add/section') { update_section(0); $q = substr($q, 0, -2); $q .= $WHERECLAUSE; - single_row_insert($q,0,$c2); + single_row_insert($q,0,$c); echo json_encode( array("rawvalstr"=>$_REQUEST['vals'], "result"=>"success","action"=>$action, - "logaction"=>$logaction, "query"=>$q,"err"=>mysqli_error($c2))); + "logaction"=>$logaction, "query"=>$q,"err"=>mysqli_error($c))); exit(); } @@ -871,13 +691,13 @@ if (isset($_REQUEST['a']) && $_REQUEST['a']=='add/letter') { update_welcome_lett // // GET LIST OF ALL SESSIONS / WORKSHOPS / EVENTS // -function get_sessions() { global $c2, $AY; - return 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 WHERE c.starttime BETWEEN CAST('{$AY['begin']}' AS DATE) AND CAST('{$AY['end']}' AS DATETIME) GROUP BY c.id ORDER BY c.track, c.starttime;",0, $c2); } +function get_sessions() { global $c, $AY; + return 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 WHERE c.starttime BETWEEN CAST('{$AY['begin']}' AS DATE) AND CAST('{$AY['end']}' AS DATETIME) GROUP BY c.id ORDER BY c.track, c.starttime;",0); } if (isset($_GET['a']) && $_GET['a'] == 'get/sessions') { echo json_encode(get_sessions()); exit(); } -function multi_row_1d($qry, $c) { +function multi_row_1d($qry) { global $c; $savedQuery = mysqli_query($c, $qry); while($savedResult = mysqli_fetch_array($savedQuery)) { $savedArray[] = $savedResult[0]; } @@ -890,17 +710,17 @@ function multi_row_1d($qry, $c) { // // GET LIST OF ALL SESSIONS + HOSTS // -function get_ses_hosts() { global $c2, $AY; - return multi_row_select("select s.id, s.title, s.starttime, u.name, u.email, u.id AS hostid from conf_sessions as s LEFT OUTER JOIN conf_hosts as h ON h.session=s.id LEFT OUTER JOIN conf_users AS u ON h.host=u.id WHERE s.id>1319 ORDER BY u.name;",1, $c2); } - //return multi_row_1d("select DISTINCT(u.email) from conf_sessions as s LEFT OUTER JOIN conf_hosts as h ON h.session=s.id LEFT OUTER JOIN conf_users AS u ON h.host=u.id WHERE s.id>1319 ORDER BY u.name;", $c2); } +function get_ses_hosts() { global $c, $AY; + return multi_row_select("select s.id, s.title, s.starttime, u.name, u.email, u.id AS hostid from conf_sessions as s LEFT OUTER JOIN conf_hosts as h ON h.session=s.id LEFT OUTER JOIN conf_users AS u ON h.host=u.id WHERE s.id>1319 ORDER BY u.name;",1); } + //return multi_row_1d("select DISTINCT(u.email) from conf_sessions as s LEFT OUTER JOIN conf_hosts as h ON h.session=s.id LEFT OUTER JOIN conf_users AS u ON h.host=u.id WHERE s.id>1319 ORDER BY u.name;"); } if (isset($_GET['a']) && $_GET['a'] == 'get/hosts') { echo get_ses_hosts(); exit(); } // // ALL HOST ENTRIES // -/*function get_all_hosts() { global $c2, $_; - $hh = multi_row_select("select host,session FROM conf_hosts ORDER BY host;",0, $c2); +/*function get_all_hosts() { global $c, $_; + $hh = multi_row_select("select host,session FROM conf_hosts ORDER BY host;",0); $byhost = $_->groupBy($hh, function($n) { return $n['host']; }); $_->map( $byhost, function($v,$k) use (&$allhost) { global $_; $allhost[$k] = $_->pluck($v,'session'); @@ -915,8 +735,8 @@ if (isset($_GET['a']) && $_GET['a'] == 'get/allhosts') { echo json_encode(get_al // // LIST THE CURRENT USER'S SIGNED UP, (OR HOSTING,) SESSIONS / WORKSHOPS / EVENTS // -function get_user_sessions() { global $c2, $AY, $USER; - $my_sessions = 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 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}') AND c.starttime BETWEEN CAST('{$AY['begin']}' AS DATE) AND CAST('{$AY['end']}' AS DATETIME) GROUP BY c.id ORDER BY c.track, c.starttime;",0,$c2); +function get_user_sessions() { global $c, $AY, $USER; + $my_sessions = 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 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}') AND c.starttime BETWEEN CAST('{$AY['begin']}' AS DATE) AND CAST('{$AY['end']}' AS DATETIME) GROUP BY c.id ORDER BY c.track, c.starttime;",0,$c); echo json_encode($my_sessions); exit(); } if (isset($_GET['a']) && $_GET['a'] == 'get/mysessions') { get_user_sessions(); } @@ -925,7 +745,7 @@ if (isset($_GET['a']) && $_GET['a'] == 'get/mysessions') { get_user_sessions(); // // GET ROSTERS OF ALL SESSIONS function get_rosters() { - global $AY, $c2; + global $AY, $c; /* "SELECT i.user, i.session, i.timestamp, u.goo, u.email, u.name, s.title, s.track, s.starttime, s.location, s.id AS sesid FROM conf_signups as i LEFT JOIN conf_users as u ON i.user=u.id RIGHT JOIN conf_sessions as s ON i.session=s.id WHERE s.starttime BETWEEN CAST('{$AY['begin']}' AS DATE) AND CAST('{$AY['end']}' AS DATETIME) {$where} ORDER BY sesid;" */ @@ -934,7 +754,7 @@ function get_rosters() { $ID = ok($_REQUEST['id']); $where = "AND s.id={$ID}"; } return multi_row_select( - "SELECT i.user, i.session, u.goo, u.email, u.name, s.id AS sesid FROM conf_signups as i LEFT JOIN conf_users as u ON i.user=u.id RIGHT JOIN conf_sessions as s ON i.session=s.id WHERE s.starttime BETWEEN CAST('{$AY['begin']}' AS DATE) AND CAST('{$AY['end']}' AS DATETIME) {$where} ORDER BY sesid;",0,$c2); } + "SELECT i.user, i.session, u.goo, u.email, u.name, s.id AS sesid FROM conf_signups as i LEFT JOIN conf_users as u ON i.user=u.id RIGHT JOIN conf_sessions as s ON i.session=s.id WHERE s.starttime BETWEEN CAST('{$AY['begin']}' AS DATE) AND CAST('{$AY['end']}' AS DATETIME) {$where} ORDER BY sesid;",0,$c); } if (isset($_GET['a']) && $_GET['a'] == 'get/rosters') { echo json_encode(get_rosters()); exit(); } @@ -943,13 +763,13 @@ if (isset($_GET['a']) && $_GET['a'] == 'get/rosters') { echo json_encode(get_ros // // GET ALL SIGNUPS function get_signups() { - global $AY, $c2; + global $AY, $c; $where = ''; if (isset($_REQUEST['id'])) { $ID = ok($_REQUEST['id']); $where = "WHERE s.id={$ID}"; } return multi_row_select( - "SELECT i.id, i.user, i.session, i.timestamp, i.certified_at, i.badged_at, i.not_flex FROM conf_signups AS i JOIN conf_sessions AS s ON i.session=s.id WHERE s.starttime BETWEEN CAST('{$AY['begin']}' AS DATE) AND CAST('{$AY['end']}' AS DATETIME) {$where} ORDER BY i.id DESC;",0,$c2); } + "SELECT i.id, i.user, i.session, i.timestamp, i.certified_at, i.badged_at, i.not_flex FROM conf_signups AS i JOIN conf_sessions AS s ON i.session=s.id WHERE s.starttime BETWEEN CAST('{$AY['begin']}' AS DATE) AND CAST('{$AY['end']}' AS DATETIME) {$where} ORDER BY i.id DESC;",0,$c); } if (isset($_GET['a']) && $_GET['a'] == 'get/signups') { echo json_encode(get_signups()); exit(); } @@ -958,9 +778,9 @@ if (isset($_GET['a']) && $_GET['a'] == 'get/signups') { echo json_encode(get_sig // // GET ALL USERS function get_users() { - global $AY, $c2; + global $AY, $c; return multi_row_select( - "SELECT * FROM conf_users AS u ORDER BY u.email;",0,$c2); } + "SELECT * FROM conf_users AS u ORDER BY u.email;",0,$c); } if (isset($_GET['a']) && $_GET['a'] == 'get/users') { echo json_encode(get_users()); exit(); } @@ -968,9 +788,9 @@ if (isset($_GET['a']) && $_GET['a'] == 'get/users') { echo json_encode(get_users // // GET ALL HOSTS function get_hosttable() { - global $AY, $c2; + global $AY, $c; return multi_row_select( - "SELECT * FROM conf_hosts;",0,$c2); } + "SELECT * FROM conf_hosts;",0,$c); } if (isset($_GET['a']) && $_GET['a'] == 'get/hosttable') { echo json_encode(get_hosttable()); exit(); } @@ -985,8 +805,8 @@ if (isset($_GET['a']) && $_GET['a'] == 'get/hosttable') { echo json_encode(get_h // all years // function get_anyuser_sessions($usr) { - global $c2, $AY, $USER; - $my_sessions = 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 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='{$usr}' OR sup.user='{$usr}') GROUP BY c.id ORDER BY c.starttime LIMIT 150;",0,$c2); + global $c, $AY, $USER; + $my_sessions = 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 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='{$usr}' OR sup.user='{$usr}') GROUP BY c.id ORDER BY c.starttime LIMIT 150;",0,$c); // AND c.starttime BETWEEN CAST('{$AY['begin']}' AS DATE) AND CAST('{$AY['end']}' AS DATETIME) return $my_sessions; } @@ -994,25 +814,25 @@ if (isset($_GET['a']) && preg_match('/get\/sessions\/(\d+)$/', $_GET['a'], $matc // MY Survey ANSWERS -function get_questions() { global $c2, $USER; +function get_questions() { global $c, $USER; //return $USER->id; - return multi_row_select( "SELECT ses.id as ses_id, sup.id as sup_id, sup.certified_at as cert, sup.surveyed_at as surveyed, cus.id as user, qset.order, qq.id, qq.question, qq.type, qq.id as qid, ans.answer FROM conf_sessions as ses JOIN conf_signups as sup on ses.id = sup.session JOIN conf_users as cus on cus.id = sup.user JOIN conf_q_set as qset on ses.gets_survey = qset.q_set RIGHT JOIN conf_questions as qq on qset.question = qq.id LEFT OUTER JOIN conf_answers as ans on ans.user = sup.user AND ans.question = qq.id AND ans.session = ses.id WHERE (cus.id='{$USER->conf_id}') ORDER BY ses.starttime, ses.track asc, qset.order", 0, $c2); } + return multi_row_select( "SELECT ses.id as ses_id, sup.id as sup_id, sup.certified_at as cert, sup.surveyed_at as surveyed, cus.id as user, qset.order, qq.id, qq.question, qq.type, qq.id as qid, ans.answer FROM conf_sessions as ses JOIN conf_signups as sup on ses.id = sup.session JOIN conf_users as cus on cus.id = sup.user JOIN conf_q_set as qset on ses.gets_survey = qset.q_set RIGHT JOIN conf_questions as qq on qset.question = qq.id LEFT OUTER JOIN conf_answers as ans on ans.user = sup.user AND ans.question = qq.id AND ans.session = ses.id WHERE (cus.id='{$USER['conf_id']}') ORDER BY ses.starttime, ses.track asc, qset.order", 0); } if (isset($_GET['a']) && $_GET['a'] == 'get/questions') { echo json_encode(get_questions()); exit(); } // Single session QUESTIONS and possibly ansers -function get_session_questions($id) { global $c2, $USER; +function get_session_questions($id) { global $c, $USER; //print_r($USER); exit(); - $u = $USER->conf_id; - return multi_row_select( "SELECT ses.title, {$u} AS user, ses.id as session, q.id AS qid, q.question, q.type, ans.answer FROM conf_sessions AS ses JOIN conf_q_set AS qset ON ses.gets_survey=qset.q_set JOIN conf_questions AS q ON q.id=qset.question LEFT OUTER JOIN conf_answers AS ans ON ans.user={$u} AND ans.question=q.id AND ans.session=ses.id WHERE ses.id={$id}", 0, $c2); } + $u = $USER['conf_id']; + return multi_row_select( "SELECT ses.title, {$u} AS user, ses.id as session, q.id AS qid, q.question, q.type, ans.answer FROM conf_sessions AS ses JOIN conf_q_set AS qset ON ses.gets_survey=qset.q_set JOIN conf_questions AS q ON q.id=qset.question LEFT OUTER JOIN conf_answers AS ans ON ans.user={$u} AND ans.question=q.id AND ans.session=ses.id WHERE ses.id={$id}", 0); } if (isset($_GET['a'])&& preg_match('/get\/questions\/(\d+)$/', $_GET['a'], $matches)) { echo json_encode(get_session_questions($matches[1])); exit(); } // ALL Survey ANSWERS -function get_answers_all() { global $c2; - return multi_row_select( "SELECT ses.id AS ses_id, ses.title as s_title, ses.starttime, qq.id as q_id, qq.question as question, qq.type as type, ans.answer AS answer FROM conf_sessions AS ses JOIN conf_signups as sup on ses.id = sup.session JOIN conf_users as cus on cus.id = sup.user JOIN conf_q_set as qset on ses.gets_survey = qset.q_set RIGHT JOIN conf_questions as qq on qset.question = qq.id LEFT OUTER JOIN conf_answers as ans on ans.user = sup.user AND ans.question = qq.id AND ans.session = ses.id WHERE ans.answer is not null ORDER BY ses.starttime, ses.track asc, qset.order", 0, $c2); } +function get_answers_all() { global $c; + return multi_row_select( "SELECT ses.id AS ses_id, ses.title as s_title, ses.starttime, qq.id as q_id, qq.question as question, qq.type as type, ans.answer AS answer FROM conf_sessions AS ses JOIN conf_signups as sup on ses.id = sup.session JOIN conf_users as cus on cus.id = sup.user JOIN conf_q_set as qset on ses.gets_survey = qset.q_set RIGHT JOIN conf_questions as qq on qset.question = qq.id LEFT OUTER JOIN conf_answers as ans on ans.user = sup.user AND ans.question = qq.id AND ans.session = ses.id WHERE ans.answer is not null ORDER BY ses.starttime, ses.track asc, qset.order", 0); } if (isset($_GET['a']) && $_GET['a'] == 'get/answers/all') { echo json_encode(get_answers_all()); exit(); } @@ -1021,24 +841,24 @@ if (isset($_GET['a']) && $_GET['a'] == 'get/answers/all') { echo json_encode(get // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // -function set_answers() { global $c, $c2; +function set_answers() { global $c; $ses_id = ok($_REQUEST['session']); $u = ok($_REQUEST['user']); $q = ok($_REQUEST['qid']); $answer = ok($_REQUEST['answer']); - $existing = does_exist( "select * from `conf_answers` where `user`='$u' and `session`='$ses_id' and `question`='$q';",0,$c2 ); + $existing = does_exist( "select * from `conf_answers` where `user`='$u' and `session`='$ses_id' and `question`='$q';",0,$c ); if ($existing) { $qupdate = "UPDATE conf_answers SET answer='$answer' WHERE session=$ses_id AND user=$u AND question=$q"; - single_row_update($qupdate,0, $c2); + single_row_update($qupdate,0); $logaction = log_it("updated answer for session: $ses_id"); } else { $qupdate = "INSERT INTO conf_answers SET user='$u', question='$q', session='$ses_id', answer='$answer'"; - single_row_insert($qupdate,0,$c2); + single_row_insert($qupdate,0,$c); $logaction = log_it("Saved answer for session: $ses_id"); } - echo json_encode( array("result"=>"success", "logaction"=>$logaction, "action"=>"save survey answer","query"=>$qupdate,"err"=>mysqli_error($c2))); + echo json_encode( array("result"=>"success", "logaction"=>$logaction, "action"=>"save survey answer","query"=>$qupdate,"err"=>mysqli_error($c))); exit(); } if (isset($_REQUEST['a']) && $_REQUEST['a']=='update/answers') { set_answers(); } @@ -1049,15 +869,15 @@ if (isset($_REQUEST['a']) && $_REQUEST['a']=='update/answers') { set_answers(); function set_cert() { #echo "saving"; - global $USER, $c2; + global $USER, $c; $ses_id = ok($_REQUEST['ses_id']); $cert = ok($_REQUEST['cert']); $date = "'" . date('Y-m-d H:i:s') . "'"; if ($cert=="null") { $date = "NULL"; } $qupdate = "UPDATE conf_signups SET `certified_at`=$date where `user`='$USER' and `session`='$ses_id'"; - single_row_update($qupdate, 0, $c2); + single_row_update($qupdate, 0); $logaction = log_it("updated certified state for session: $ses_id"); - echo json_encode( array("result"=>"success", "logaction"=>$logaction, "action"=>"save cert","query"=>$qupdate,"err"=>mysqli_error($c2))); + echo json_encode( array("result"=>"success", "logaction"=>$logaction, "action"=>"save cert","query"=>$qupdate,"err"=>mysqli_error($c))); //print_r($_POST); exit(); } @@ -1072,7 +892,7 @@ if (isset($_REQUEST['a']) && $_REQUEST['a']=='set/cert') { set_cert(); } // SIGNUP for (possibly overlapping time) session ... /// id_c_users // function signup() { - global $c2, $AY, $USER; + global $c, $AY, $USER; preg_match('/signup\/(\d+)$/', $_GET['a'], $matches); $ses = $matches[1]; $ts = date("Y-m-d H:i:s"); @@ -1082,16 +902,16 @@ function signup() { if (isset($_SESSION)) { $sesh = $_SESSION; } $existing = does_exist( - "SELECT i.id FROM conf_signups AS i JOIN conf_sessions AS s ON i.session=s.id WHERE s.id={$ses} AND i.user=" . $USER->conf_id,0,$c2); + "SELECT i.id FROM conf_signups AS i JOIN conf_sessions AS s ON i.session=s.id WHERE s.id={$ses} AND i.user=" . $USER['conf_id'],0,$c); if ($existing) { - $qupdate = "UPDATE conf_signups SET session={$ses}, timestamp='{$ts}' WHERE session={$ses} AND user=" . $USER->conf_id; - single_row_select($qupdate,1,$c2); - echo json_encode( array("result"=>"success","action"=>"updated","logaction"=>$logaction, "query"=>$qupdate,"err"=>mysqli_error($c2))); + $qupdate = "UPDATE conf_signups SET session={$ses}, timestamp='{$ts}' WHERE session={$ses} AND user=" . $USER['conf_id']; + single_row_select($qupdate,1,$c); + echo json_encode( array("result"=>"success","action"=>"updated","logaction"=>$logaction, "query"=>$qupdate,"err"=>mysqli_error($c))); } else { - $q = "INSERT INTO conf_signups (session,user,timestamp) VALUES ({$ses}," . $USER->conf_id . ",'{$ts}')"; - single_row_insert($q,1,$c2); + $q = "INSERT INTO conf_signups (session,user,timestamp) VALUES ({$ses}," . $USER['conf_id'] . ",'{$ts}')"; + single_row_insert($q,1,$c); echo json_encode( array( /* "userglobal"=>$USER, */ "result"=>"success","action"=>"inserted", /* "logaction"=>$logaction, */ - "ses"=>$sesh,"query"=>$q,"err"=>mysqli_error($c2))); + "ses"=>$sesh,"query"=>$q,"err"=>mysqli_error($c))); } exit(); } if (isset($_GET['a']) && preg_match('/signup\/(\d+)$/', $_GET['a'], $matches)) { signup(); } @@ -1103,14 +923,14 @@ if (isset($_GET['a']) && preg_match('/signup\/(\d+)$/', $_GET['a'], $matches)) { // CANCEL a signup // function signdown() { - global $c2, $AY, $USER; + global $c, $AY, $USER; preg_match('/signdown\/(\d+)$/', $_GET['a'], $matches); $ses = $matches[1]; - $q = "DELETE FROM conf_signups WHERE session={$ses} AND user=" . $USER->conf_id; - single_row_update($q,1,$c2); + $q = "DELETE FROM conf_signups WHERE session={$ses} AND user=" . $USER['conf_id']; + single_row_update($q,1); $logaction = log_it("Canceled signup for session: $ses"); - echo json_encode( array("result"=>"success","action"=>"deleted","logaction"=>$logaction, "query"=>$q,"err"=>mysqli_error($c2))); + echo json_encode( array("result"=>"success","action"=>"deleted","logaction"=>$logaction, "query"=>$q,"err"=>mysqli_error($c))); exit(); } if (isset($_GET['a']) && preg_match('/signdown\/(\d+)$/', $_GET['a'], $matches)) { signdown(); } @@ -1122,14 +942,14 @@ if (isset($_GET['a']) && preg_match('/signdown\/(\d+)$/', $_GET['a'], $matches)) // add a HOST for a session ... // function addhost($sesid,$hostid) { - global $c2; + global $c; $sesid = ok($sesid); $hostid = ok($hostid); - $existing = does_exist("SELECT h.host, h.session FROM conf_hosts AS h WHERE h.host={$hostid} AND h.session={$sesid}",0,$c2); + $existing = does_exist("SELECT h.host, h.session FROM conf_hosts AS h WHERE h.host={$hostid} AND h.session={$sesid}",0,$c); if ($existing) { return array("result"=>"success","action"=>"already a host"); } else { $qupdate = "INSERT INTO conf_hosts SET session='{$sesid}', host='{$hostid}';"; - $new_id = single_row_insert($qupdate,0,$c2); - $e = mysqli_error($c2); + $new_id = single_row_insert($qupdate,0,$c); + $e = mysqli_error($c); if ($new_id) { $success = " with new id {$new_id}"; } else { $success = " -- error: {$e}"; } $logaction = log_it("Added host {$hostid} to session: {$sesid}"); @@ -1144,11 +964,11 @@ if (isset($_GET['a']) && preg_match('/add\/host\/(\d+)\/(\d+)$/', $_GET['a'], $m // REMOVE a HOST for a session ... // function removehost($sesid,$hostid) { - global $c2; + global $c; $sesid = ok($sesid); $hostid = ok($hostid); $qupdate = "DELETE FROM conf_hosts WHERE session='{$sesid}' AND host='{$hostid}';"; - $new_id = single_row_update($qupdate,0,$c2); - $e = mysqli_error($c2); + $new_id = single_row_update($qupdate,0); + $e = mysqli_error($c); $logaction = log_it("Removed host {$hostid} to session: {$sesid}"); return array("result"=>"success","action"=>"removed host","query"=>$qupdate,"err"=>$e); } @@ -1166,7 +986,7 @@ if (isset($_GET['a']) && preg_match('/remove\/host\/(\d+)\/(\d+)$/', $_GET['a'], // NEW SESSION // function new_session() { - global $c2, $AY, $USER; + global $c, $AY, $USER; $title = ok($_POST['title']); $starttime = ok($_POST['starttime']); @@ -1185,9 +1005,9 @@ function new_session() { $q = "INSERT INTO conf_sessions (`title`,`starttime`,`length`,`track`,`gets_survey`,`is_flex_approved`,`category`,`author`,`is_custom`,`parent`,`desc`,`location`,`mode`,`recording`,`instructions`,`type`,`cal_uid`) VALUES ('{$title}', '{$starttime}', '{$length}', '{$track}', '{$gets_survey}', '{$is_flex_approved}', '{$category}', '{$author}', '{$is_custom}', '{$parent}', '{$desc}', '{$location}', '{$location_irl}', '{$mode}', '{$recording}', '{$instructions}', '{$type}', '{$cal_uid}');"; - $ins = single_row_insert($q,0,$c2); + $ins = single_row_insert($q,0,$c); $logaction = log_it("created new session id: {$ins}: {$title}"); - echo json_encode( array( /*"all_args"=>$_POST,*/ "result"=>"success","action"=>"inserted new session","new_id"=>$ins, "query"=>$q,"logaction"=>$logaction,"err"=>mysqli_error($c2))); + echo json_encode( array( /*"all_args"=>$_POST,*/ "result"=>"success","action"=>"inserted new session","new_id"=>$ins, "query"=>$q,"logaction"=>$logaction,"err"=>mysqli_error($c))); exit(); } if (isset($_REQUEST['a']) && $_REQUEST['a']=='set/newsession') { new_session(); } @@ -1204,7 +1024,7 @@ if (isset($_REQUEST['a']) && $_REQUEST['a']=='set/newsession') { new_session(); function reducer ($memo, $a) { return $memo . "`" . ok($a[0]) . "` = '" . okh($a[1]) . "', "; } function set_sessioninfo() { - global $c, $c2, $AY, $USER, $_; + global $c, $AY, $USER, $_; $table = 'conf_sessions'; $DO_CHECKING = 0; @@ -1226,8 +1046,8 @@ function set_sessioninfo() { $q = array_reduce($cv, 'reducer', "UPDATE `{$table}` SET "); $q = substr($q, 0, -2); $q .= $WHERECLAUSE; - single_row_update($q,0,$c2); - echo json_encode( array("rawvalstr"=>$_REQUEST['vals'], "result"=>"success","action"=>"updated", "query"=>$q,"err"=>mysqli_error($c2))); + 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") ); } @@ -1248,8 +1068,8 @@ if (isset($_REQUEST['a']) && $_REQUEST['a']=='update/activity') { set_sessioninf // // GET -function get_settings() { global $AY, $c2; - return multi_row_select( "SELECT * FROM conf_uinforecord;",0,$c2); } +function get_settings() { global $AY, $c; + return multi_row_select( "SELECT * FROM conf_uinforecord;",0,$c); } if (isset($_GET['a']) && $_GET['a'] == 'get/settings') { echo json_encode(get_settings()); exit(); } @@ -1257,7 +1077,7 @@ if (isset($_GET['a']) && $_GET['a'] == 'get/settings') { echo json_encode(get_se function set_settings() { - global $c, $c2, $AY, $USER, $_; + global $c, $AY, $USER, $_; $table = 'conf_uinforecord'; $DO_CHECKING = 0; @@ -1279,8 +1099,8 @@ function set_settings() { $q = array_reduce($cv, 'reducer', "UPDATE `{$table}` SET "); $q = substr($q, 0, -2); $q .= $WHERECLAUSE; - single_row_update($q,0,$c2); - echo json_encode( array("rawvalstr"=>$_REQUEST['vals'], "result"=>"success","action"=>"updated", "query"=>$q,"err"=>mysqli_error($c2))); + 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") ); } @@ -1515,11 +1335,13 @@ function handle_pic_upload() { global $USER; } //if (isset($_REQUEST['file'])) { handle_pic_upload(); } + +/* if (isset($_FILES['file'])) { handle_pic_upload(); } -function get_a_user_by_pid($user_pid) { global $c, $c2, $_; +function get_a_user_by_pid($user_pid) { global $c, $_; $q1 = "SELECT last_name, first_name, department, extension, phone_number, email, room, user_id, time_updated, id, web_on FROM personnel WHERE id='{$user_pid}'"; - $usr_dir = single_row_select($q1, 0, $c); + $usr_dir = single_row_select($q1, 0); $q2 = "SELECT id AS id_c_users, goo, email AS email_c_users, name, active FROM conf_users WHERE email='{$usr_dir['email']}'"; $usr_conf = single_row_select($q2, 0, $c2); $mega = $_->extend( (object) $usr_dir, (object) $usr_conf ); @@ -1532,7 +1354,7 @@ function get_a_user_by_pid($user_pid) { global $c, $c2, $_; // ????? - + */ /* if (!isset($mega->use_dir_photo)) { $mega->pic_exists = check_dir_photo($mega->first_name, $mega->last_name); if ($mega->pic_exists) { @@ -1547,18 +1369,21 @@ function get_a_user_by_pid($user_pid) { global $c, $c2, $_; elseif ($mega->id && ! $mega->personnel_id) { $mega->aaqueryfix = "UPDATE gavi_personnel_ext SET personnel='{$mega->id}' WHERE id='{$mega->ext_id}'"; } */ - + /* echo json_encode( $mega ); exit(); } if (isset($_REQUEST['a']) && preg_match('/^get\/user\/(\d+)$/', $_REQUEST['a'], $matches)) { get_a_user_by_pid( $matches[1] ); } +*/ + +/* function get_a_user($user_email) { global $c, $c2, $_; $q1 = "SELECT last_name, first_name, department, extension, phone_number, email, room, user_id, time_updated, id, web_on FROM personnel WHERE email='" . $user_email . "'"; //p2($q1); - $usr_dir = single_row_select($q1, 0, $c); + $usr_dir = single_row_select($q1, 0); //p2($usr_dir); $q2 = "SELECT id AS id_c_users, goo, email AS email_c_users, name, active FROM conf_users WHERE email='" . $user_email . "'"; @@ -1567,19 +1392,19 @@ function get_a_user($user_email) { global $c, $c2, $_; //p2($usr_conf); $mega = $_->extend( (object) $usr_dir, (object) $usr_conf ); - $q3 = 'SELECT id AS ext_id, personnel AS personnel_id, goo_short, c_users AS c_users_id_ext, ilearn_id, sched_alias, dept1, dept2, gtitle, active, use_dir_photo, etc FROM gavi_personnel_ext WHERE personnel=' . $mega->id; + $q3 = 'SELECT id AS ext_id, personnel AS personnel_id, goo_short, c_users AS c_users_id_ext, ilearn_id, sched_alias, dept1, dept2, gtitle, active, use_dir_photo, etc FROM gavi_personnel_ext WHERE personnel=' . $mega['id']; //p2($q3); $usr_ext = single_row_select($q3,0,$c2); //p2($usr_ext); $mega = $_->extend( (object) $mega, (object) $usr_ext ); - $q4 = 'SELECT person, officehours, title, picture, education, bio, courses, personal_page, changed FROM webpages WHERE person=' . $mega->id; // personnel=1'); + $q4 = 'SELECT person, officehours, title, picture, education, bio, courses, personal_page, changed FROM webpages WHERE person=' . $mega['id']; // personnel=1'); //p2($q3); $usr_web = single_row_select($q4,0,$c); //p2($usr_ext); $mega = $_->extend( (object) $mega, (object) $usr_web ); - /* + if (!isset($mega->use_dir_photo)) { $mega->pic_exists = check_dir_photo($mega->first_name, $mega->last_name); if ($mega->pic_exists) { @@ -1588,20 +1413,23 @@ function get_a_user($user_email) { global $c, $c2, $_; } else { $mega->bbqueryfix = "UPDATE gavi_personnel_ext SET use_dir_photo=0 WHERE id='{$mega->ext_id}'"; } - }*/ - if (! isset($mega->ext_id)) { - $mega->aaqueryfix = "INSERT INTO gavi_personnel_ext (personnel) VALUES('{$mega->id}')"; } + } + if (! isset($mega['ext_id'])) { + $mega->aaqueryfix = "INSERT INTO gavi_personnel_ext (personnel) VALUES('{$mega['id']}')"; } elseif ($mega->id && ! $mega->personnel_id) { - $mega->aaqueryfix = "UPDATE gavi_personnel_ext SET personnel='{$mega->id}' WHERE id='{$mega->ext_id}'"; } + $mega->aaqueryfix = "UPDATE gavi_personnel_ext SET personnel='{$mega['id']}' WHERE id='{$mega['ext_id']}'"; } return $mega; } +*/ - +/* function insert_c2($q) { global $c2; $result = single_row_insert($q,0,$c2); return $result; } +*/ + function merge_tables() { global $c, $_; $all_personnel = multi_row_select('SELECT first_name,last_name,department,room,phone_number,email,web_on,id FROM personnel WHERE status IS null OR status=1',0, $c); @@ -1636,14 +1464,14 @@ function fetch_personnel_dir() { global $c; exit(); } if (isset($_REQUEST['personnel'])) { fetch_personnel_dir(); } -function fetch_conf_users() { global $c2; - $all_personnel = multi_row_select('SELECT * FROM conf_users',0, $c2); +function fetch_conf_users() { global $c; + $all_personnel = multi_row_select('SELECT * FROM conf_users',0, $c); echo json_encode($all_personnel); exit(); } if (isset($_REQUEST['users'])) { fetch_conf_users(); } -function fetch_personnel_ext() { global $c2; - $all_personnel = multi_row_select('SELECT * FROM gavi_personnel_ext',0, $c2); +function fetch_personnel_ext() { global $c; + $all_personnel = multi_row_select('SELECT * FROM gavi_personnel_ext',0, $c); echo json_encode($all_personnel); exit(); } if (isset($_REQUEST['personnelext'])) { fetch_personnel_ext(); } @@ -1696,10 +1524,10 @@ function navigation($user) { } -function test_sso() { global $c2; +function test_sso() { global $c; $goo = "102586"; //"123456"; $q0 = "SELECT email FROM conf_users WHERE goo='{$goo}'"; - $temp_usr = single_row_select($q0,0,$c2); + $temp_usr = single_row_select($q0,0,$c); echo '
';
     var_dump($temp_usr);
     echo '
'; diff --git a/graf/bird2024.png b/graf/bird2024.png new file mode 100644 index 0000000000000000000000000000000000000000..86ece8a00cf44ca846ba4f331fd49f68b675b86e GIT binary patch literal 18447 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 - -
-
-
-
{{mmyy}} {{get_day_title(mmyy)}}
-
-
- -
-
-
- -
+
Current time is: {{ current_time }}. Return here for the ZOOM links on the day of your sessions.
  diff --git a/semester.php b/semester.php index f8d4933..bdc7f20 100644 --- a/semester.php +++ b/semester.php @@ -10,6 +10,7 @@ if (isset($_REQUEST['y']) ) { $y = $_REQUEST['y']; } $day = $y . "-" . $m . "-" . $d; +date_default_timezone_set('America/Los_Angeles'); $dateObj = DateTime::createFromFormat('!m', $m); $monthName = $dateObj->format('F'); // March diff --git a/single_sign_on.php b/single_sign_on.php new file mode 100644 index 0000000..d2bc31f --- /dev/null +++ b/single_sign_on.php @@ -0,0 +1,106 @@ +'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 action='{$ACTION}', " /*personnel_id='{$persid}',name='{$USER['user_id']}', */ . "browser=$BROWSER, ip='$user_ip'"; + single_row_insert($qupdate,0,$c); + return array("result"=>"success","action"=>"logged","query"=>$qupdate,"err"=>mysqli_error($c)); } + + + +if ( $server == 'intranet1.gavilan.edu' ) { // The SSO check should have happened on the actual page. If it gets +// // stuck on an api call the app will break. + if ( session_id() == '' ) { // session_status() == PHP_SESSION_ACTIVE // newer php uses this + require 'mAuth.php'; + $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_start(); + $_SESSION['USER_TYPE'] = $USER_TYPE; + $_SESSION['USER_GOO'] = $USER_GOO; + $_SESSION['USER_EMAIL'] = $USER_EMAIL; + } else { // already logged in.... + $USER_TYPE = $_SESSION['USER_TYPE']; + $USER_GOO = $_SESSION['USER_GOO']; + $USER_EMAIL = $_SESSION['USER_EMAIL']; + } +} else { // just testing on a different server... + $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; +} + +// No email? Might be a problem. Look up by goo +if (! $USER_EMAIL) { + $goo = substr($USER_GOO, 3); + $q0 = "SELECT email,name FROM conf_users WHERE goo='{$goo}'"; + $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); + //$logaction = log_it("Made a new conf_users row for {$USER_NAME} / {$LC_EMAIL} / {$USER_GOO}"); + } + $USER_NAME = $temp_usr['name']; + $USER_EMAIL = strtolower($temp_usr['email']); +} + +// +// +// +// +// Set up user global +$goo = substr($USER_GOO, 3); +$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); + +// 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); + +} +