From 88bdfd6d8123b43569ac2d071c599f58cbab7782 Mon Sep 17 00:00:00 2001 From: Kenneth Chen <74205780+Chenneth@users.noreply.github.com> Date: Wed, 7 Dec 2022 14:28:12 -0600 Subject: [PATCH 01/33] Added if statement to check if url is set on attachment --- api/discord/bot.php | 49 +++++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/api/discord/bot.php b/api/discord/bot.php index b65dbd83..dc24a12e 100644 --- a/api/discord/bot.php +++ b/api/discord/bot.php @@ -63,28 +63,33 @@ public static function send_message($message, $channel_id, $attachments = null) $files = array(); if ($attachments) { - foreach ($attachments as $k => $attachment) { - $file = tmpfile(); - $path = stream_get_meta_data($file)['uri']; - - //$content = file_get_contents($attachment['url']); - - $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, $attachment['url']); - curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); - $content = curl_exec($ch); - - //error_log($content); - - file_put_contents($path, $content); - //error_log($attachment['url']); - //error_log($path); - //error_log($content); - - $files["attachment{$k}"] = new CURLFile($path, $attachment['type'], "attachment{$k}." . mime2ext($attachment['type'])); - } - } + foreach ($attachments as $k => $attachment) { + $file = tmpfile(); + $path = stream_get_meta_data($file)['uri']; + if(isset($attachment['url'])) // sebastian only insane people put curly braces on the same line + { + //$content = file_get_contents($attachment['url']); + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $attachment['url']); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + $content = curl_exec($ch); + + //error_log($content); + + file_put_contents($path, $content); + //error_log($attachment['url']); + //error_log($path); + //error_log($content); + } + else if(isset($attachment['uri'])) // It's a local file (hopefully) + { + file_put_contents($path, $attachment['uri']); + } + $files["attachment{$k}"] = new CURLFile($path, $attachment['type'], "attachment{$k}." . mime2ext($attachment['type'])); + } + } //error_log(var_export($files, true)); return static::send_api_request("/channels/{$channel_id}/messages", 'POST', 'multipart/form-data', $data, $files); From b89ba190a315424c4418c9d210b8f82347b93de2 Mon Sep 17 00:00:00 2001 From: Kenneth Chen <74205780+Chenneth@users.noreply.github.com> Date: Wed, 7 Dec 2022 21:47:30 -0600 Subject: [PATCH 02/33] Changed it so we aren't duplicating tmpfiles --- api/discord/bot.php | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/api/discord/bot.php b/api/discord/bot.php index dc24a12e..01a3130f 100644 --- a/api/discord/bot.php +++ b/api/discord/bot.php @@ -64,12 +64,20 @@ public static function send_message($message, $channel_id, $attachments = null) $files = array(); if ($attachments) { foreach ($attachments as $k => $attachment) { - $file = tmpfile(); - $path = stream_get_meta_data($file)['uri']; - if(isset($attachment['url'])) // sebastian only insane people put curly braces on the same line + + /*if(isset($attachment['bin'])) // It's a local file (hopefully) + { + file_put_contents($path, $attachment['bin']); + }*/ + if(isset($attachment['path'])) + { + $files["attachment{$k}"] = new CURLFile($attachment['path'],$attachment['type'], "attachments{$k}." . $attachment['type']); + } + else // sebastian only insane people put curly braces on the same line { //$content = file_get_contents($attachment['url']); - + $file = tmpfile(); + $path = stream_get_meta_data($file)['uri']; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $attachment['url']); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); @@ -82,12 +90,9 @@ public static function send_message($message, $channel_id, $attachments = null) //error_log($attachment['url']); //error_log($path); //error_log($content); + $files["attachment{$k}"] = new CURLFile($path, $attachment['type'], "attachment{$k}." . mime2ext($attachment['type'])); } - else if(isset($attachment['uri'])) // It's a local file (hopefully) - { - file_put_contents($path, $attachment['uri']); - } - $files["attachment{$k}"] = new CURLFile($path, $attachment['type'], "attachment{$k}." . mime2ext($attachment['type'])); + } } //error_log(var_export($files, true)); From a8f2cb4ff55074a4e9d25e3f82a2188ba6ab29ef Mon Sep 17 00:00:00 2001 From: Kenneth Chen <74205780+Chenneth@users.noreply.github.com> Date: Wed, 7 Dec 2022 22:55:52 -0600 Subject: [PATCH 03/33] Changed json decoding a constant to an array --- template/functions/mime2ext.php | 521 +++++++++++++++++++++++++++++++- 1 file changed, 518 insertions(+), 3 deletions(-) diff --git a/template/functions/mime2ext.php b/template/functions/mime2ext.php index 91310c73..3ba463d6 100644 --- a/template/functions/mime2ext.php +++ b/template/functions/mime2ext.php @@ -1,8 +1,523 @@ $value) { + //I'm leaving this here to shame seb + /*$all_mimes = '{ + "png": + [ + "image\/png", + "image\/x-png" + ], + "bmp": + [ + "image\/bmp","image\/x-bmp","image\/x-bitmap","image\/x-xbitmap","image\/x-win-bitmap","image\/x-windows-bmp","image\/ms-bmp","image\/x-ms-bmp","application\/bmp","application\/x-bmp","application\/x-win-bitmap" + ], + "gif": + [ + "image\/gif" + ], + "jpeg": + [ + "image\/jpeg","image\/pjpeg" + ], + "xspf": + [ + "application\/xspf+xml" + ], + "vlc": + [ + "application\/videolan" + ], + "wmv": + [ + "video\/x-ms-wmv","video\/x-ms-asf" + ], + "au": + [ + "audio\/x-au" + ], + "ac3": + [ + "audio\/ac3" + ],"flac": + [ + "audio\/x-flac" + ], + "ogg": + [ + "audio\/ogg","video\/ogg","application\/ogg" + ], + "kmz": + [ + "application\/vnd.google-earth.kmz" + ], + "kml": + [ + "application\/vnd.google-earth.kml+xml" + ], + "rtx": + [ + "text\/richtext" + ], + "rtf": + [ + "text\/rtf" + ], + "jar": + [ + "application\/java-archive","application\/x-java-application","application\/x-jar" + ], + "zip": + [ + "application\/x-zip","application\/zip","application\/x-zip-compressed","application\/s-compressed","multipart\/x-zip" + ], + "7zip": + [ + "application\/x-compressed" + ], + "xml": + [ + "application\/xml","text\/xml" + ], + "svg": + [ + "image\/svg+xml" + ], + "3g2": + [ + "video\/3gpp2" + ], + "3gp": + [ + "video\/3gp","video\/3gpp" + ], + "mp4": + [ + "video\/mp4" + ], + "m4a": + [ + "audio\/x-m4a" + ], + "f4v": + [ + "video\/x-f4v" + ], + "flv": + [ + "video\/x-flv" + ], + "webm": + [ + "video\/webm" + ], + "aac": + [ + "audio\/x-acc" + ], + "m4u": + [ + "application\/vnd.mpegurl" + ], + "pdf": + [ + "application\/pdf","application\/octet-stream" + ], + "pptx": + [ + "application\/vnd.openxmlformats-officedocument.presentationml.presentation" + ], + "ppt": + [ + "application\/powerpoint","application\/vnd.ms-powerpoint","application\/vnd.ms-office","application\/msword" + ], + "docx": + [ + "application\/vnd.openxmlformats-officedocument.wordprocessingml.document" + ], + "xlsx": + [ + "application\/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application\/vnd.ms-excel" + ], + "xl": + [ + "application\/excel" + ], + "xls": + [ + "application\/msexcel","application\/x-msexcel","application\/x-ms-excel","application\/x-excel","application\/x-dos_ms_excel","application\/xls","application\/x-xls" + ], + "xsl": + [ + "text\/xsl" + ], + "mpeg": + [ + "video\/mpeg" + ], + "mov": + [ + "video\/quicktime" + ], + "avi": + [ + "video\/x-msvideo","video\/msvideo","video\/avi","application\/x-troff-msvideo" + ], + "movie": + [ + "video\/x-sgi-movie" + ], + "log": + [ + "text\/x-log" + ], + "txt": + [ + "text\/plain" + ], + "css": + [ + "text\/css" + ], + "html": + [ + "text\/html" + ], + "wav": + [ + "audio\/x-wav","audio\/wave","audio\/wav" + ], + "xhtml": + [ + "application\/xhtml+xml" + ], + "tar": + [ + "application\/x-tar" + ], + "tgz": + [ + "application\/x-gzip-compressed" + ], + "psd": + [ + "application\/x-photoshop","image\/vnd.adobe.photoshop" + ], + "exe": + [ + "application\/x-msdownload" + ], + "js": + [ + "application\/x-javascript" + ], + "mp3": + [ + "audio\/mpeg","audio\/mpg","audio\/mpeg3","audio\/mp3" + ], + "rar": + [ + "application\/x-rar","application\/rar","application\/x-rar-compressed" + ], + "gzip": + [ + "application\/x-gzip" + ], + "hqx": + [ + "application\/mac-binhex40","application\/mac-binhex","application\/x-binhex40","application\/x-mac-binhex40" + ], + "cpt": + [ + "application\/mac-compactpro" + ], + "bin": + [ + "application\/macbinary","application\/mac-binary","application\/x-binary","application\/x-macbinary" + ], + "oda": + [ + "application\/oda" + ], + "ai": + [ + "application\/postscript" + ], + "smil": + [ + "application\/smil" + ], + "mif": + [ + "application\/vnd.mif" + ], + "wbxml": + [ + "application\/wbxml" + ], + "wmlc": + [ + "application\/wmlc" + ], + "dcr": + [ + "application\/x-director" + ], + "dvi": + [ + "application\/x-dvi" + ], + "gtar": + [ + "application\/x-gtar" + ], + "php": + [ + "application\/x-httpd-php","application\/php","application\/x-php","text\/php","text\/x-php","application\/x-httpd-php-source" + ], + "swf": + [ + "application\/x-shockwave-flash" + ], + "sit": + [ + "application\/x-stuffit" + ], + "z": + [ + "application\/x-compress" + ], + "mid": + [ + "audio\/midi" + ], + "aif": + [ + "audio\/x-aiff","audio\/aiff" + ], + "ram": + [ + "audio\/x-pn-realaudio" + ], + "rpm": + [ + "audio\/x-pn-realaudio-plugin" + ], + "ra": + [ + "audio\/x-realaudio" + ], + "rv": + [ + "video\/vnd.rn-realvideo" + ], + "jp2": + [ + "image\/jp2","video\/mj2","image\/jpx","image\/jpm" + ], + "tiff": + [ + "image\/tiff" + ], + "eml": + [ + "message\/rfc822" + ], + "pem": + [ + "application\/x-x509-user-cert","application\/x-pem-file" + ], + "p10": + [ + "application\/x-pkcs10","application\/pkcs10" + ], + "p12": + [ + "application\/x-pkcs12" + ], + "p7a": + [ + "application\/x-pkcs7-signature" + ], + "p7c": + [ + "application\/pkcs7-mime","application\/x-pkcs7-mime" + ], + "p7r": + [ + "application\/x-pkcs7-certreqresp" + ], + "p7s": + [ + "application\/pkcs7-signature" + ], + "crt": + [ + "application\/x-x509-ca-cert","application\/pkix-cert" + ], + "crl": + [ + "application\/pkix-crl","application\/pkcs-crl" + ], + "pgp": + [ + "application\/pgp" + ], + "gpg": + [ + "application\/gpg-keys" + ], + "rsa": + [ + "application\/x-pkcs7" + ], + "ics": + [ + "text\/calendar" + ], + "zsh": + [ + "text\/x-scriptzsh" + ], + "cdr": + [ + "application\/cdr","application\/coreldraw","application\/x-cdr","application\/x-coreldraw","image\/cdr","image\/x-cdr","zz-application\/zz-winassoc-cdr" + ], + "wma": + [ + "audio\/x-ms-wma" + ], + "vcf": + [ + "text\/x-vcard" + ], + "srt": + [ + "text\/srt" + ], + "vtt": + [ + "text\/vtt" + ], + "ico": + [ + "image\/x-icon","image\/x-ico","image\/vnd.microsoft.icon" + ], + "csv": + [ + "text\/x-comma-separated-values","text\/comma-separated-values","application\/vnd.msexcel" + ], + "json": + [ + "application\/json","text\/json" + ]}';*/ + //$all_mimes = json_decode($all_mimes,true); + + $mimes = array( + "png"=>array("image/png","image/x-png"), + "bmp"=>array("image/bmp","image/x-bmp","image/x-bitmap","image/x-xbitmap","image/x-win-bitmap","image/x-windows-bmp","image/ms-bmp","image/x-ms-bmp","application/bmp","application/x-bmp","application/x-win-bitmap"), + "gif"=>array("image/gif"), + "jpeg"=>array("image/jpeg","image/pjpeg"), + "xspf"=>array("application/xspf+xml"), + "vlc"=>array("application/videolan"), + "wmv"=>array("video/x-ms-wmv","video/x-ms-asf"), + "au"=>array("audio/x-au"), + "ac3"=>array("audio/ac3"), + "flac"=>array("audio/x-flac"), + "ogg"=>array("audio/ogg","video/ogg","application/ogg"), + "kmz"=>array("application/vnd.google-earth.kmz"), + "kml"=>array("application/vnd.google-earth.kml+xml"), + "rtx"=>array("text/richtext"), + "rtf"=>array("text/rtf"), + "jar"=>array("application/java-archive","application/x-java-application","application/x-jar"), + "zip"=>array("application/x-zip","application/zip","application/x-zip-compressed","application/s-compressed","multipart/x-zip"), + "7zip"=>array("application/x-compressed"), + "xml"=>array("application/xml","text/xml"), + "svg"=>array("image/svg+xml"), + "3g2"=>array("video/3gpp2"), + "3gp"=>array("video/3gp","video/3gpp"), + "mp4"=>array("video/mp4"), + "m4a"=>array("audio/x-m4a"), + "f4v"=>array("video/x-f4v"), + "flv"=>array("video/x-flv"), + "webm"=>array("video/webm"), + "aac"=>array("audio/x-acc"), + "m4u"=>array("application/vnd.mpegurl"), + "pdf"=>array("application/pdf","application/octet-stream"), + "pptx"=>array("application/vnd.openxmlformats-officedocument.presentationml.presentation"), + "ppt"=>array("application/powerpoint","application/vnd.ms-powerpoint","application/vnd.ms-office","application/msword"), + "docx"=>array("application/vnd.openxmlformats-officedocument.wordprocessingml.document"), + "xlsx"=>array("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.ms-excel"), + "xl"=>array("application/excel"), + "xls"=>array("application/msexcel","application/x-msexcel","application/x-ms-excel","application/x-excel","application/x-dos_ms_excel","application/xls","application/x-xls"), + "xsl"=>array("text/xsl"), + "mpeg"=>array("video/mpeg"), + "mov"=>array("video/quicktime"), + "avi"=>array("video/x-msvideo","video/msvideo","video/avi","application/x-troff-msvideo"), + "movie"=>array("video/x-sgi-movie"), + "log"=>array("text/x-log"), + "txt"=>array("text/plain"), + "css"=>array("text/css"), + "html"=>array("text/html"), + "wav"=>array("audio/x-wav","audio/wave","audio/wav"), + "xhtml"=>array("application/xhtml+xml"), + "tar"=>array("application/x-tar"), + "tgz"=>array("application/x-gzip-compressed"), + "psd"=>array("application/x-photoshop","image/vnd.adobe.photoshop"), + "exe"=>array("application/x-msdownload"), + "js"=>array("application/x-javascript"), + "mp3"=>array("audio/mpeg","audio/mpg","audio/mpeg3","audio/mp3"), + "rar"=>array("application/x-rar","application/rar","application/x-rar-compressed"), + "gzip"=>array("application/x-gzip"), + "hqx"=>array("application/mac-binhex40","application/mac-binhex","application/x-binhex40","application/x-mac-binhex40"), + "cpt"=>array("application/mac-compactpro"), + "bin"=>array("application/macbinary","application/mac-binary","application/x-binary","application/x-macbinary"), + "oda"=>array("application/oda"), + "ai"=>array("application/postscript"), + "smil"=>array("application/smil"), + "mif"=>array("application/vnd.mif"), + "wbxml"=>array("application/wbxml"), + "wmlc"=>array("application/wmlc"), + "dcr"=>array("application/x-director"), + "dvi"=>array("application/x-dvi"), + "gtar"=>array("application/x-gtar"), + "php"=>array("application/x-httpd-php","application/php","application/x-php","text/php","text/x-php","application/x-httpd-php-source"), + "swf"=>array("application/x-shockwave-flash"), + "sit"=>array("application/x-stuffit"), + "z"=>array("application/x-compress"), + "mid"=>array("audio/midi"), + "aif"=>array("audio/x-aiff","audio/aiff"), + "ram"=>array("audio/x-pn-realaudio"), + "rpm"=>array("audio/x-pn-realaudio-plugin"), + "ra"=>array("audio/x-realaudio"), + "rv"=>array("video/vnd.rn-realvideo"), + "jp2"=>array("image/jp2","video/mj2","image/jpx","image/jpm"), + "tiff"=>array("image/tiff"), + "eml"=>array("message/rfc822"), + "pem"=>array("application/x-x509-user-cert","application/x-pem-file"), + "p10"=>array("application/x-pkcs10","application/pkcs10"), + "p12"=>array("application/x-pkcs12"), + "p7a"=>array("application/x-pkcs7-signature"), + "p7c"=>array("application/pkcs7-mime","application/x-pkcs7-mime"), + "p7r"=>array("application/x-pkcs7-certreqresp"), + "p7s"=>array("application/pkcs7-signature"), + "crt"=>array("application/x-x509-ca-cert","application/pkix-cert"), + "crl"=>array("application/pkix-crl","application/pkcs-crl"), + "pgp"=>array("application/pgp"), + "gpg"=>array("application/gpg-keys"), + "rsa"=>array("application/x-pkcs7"), + "ics"=>array("text/calendar"), + "zsh"=>array("text/x-scriptzsh"), + "cdr"=>array("application/cdr","application/coreldraw","application/x-cdr","application/x-coreldraw","image/cdr","image/x-cdr","zz-application/zz-winassoc-cdr"), + "wma"=>array("audio/x-ms-wma"), + "vcf"=>array("text/x-vcard"), + "srt"=>array("text/srt"), + "vtt"=>array("text/vtt"), + "ico"=>array("image/x-icon","image/x-ico","image/vnd.microsoft.icon"), + "csv"=>array("text/x-comma-separated-values","text/comma-separated-values","application/vnd.msexcel"), + "json"=>array("application/json","text/json") + ); + + foreach ($mimes as $key => $value) { if(array_search($mime,$value) !== false) { return $key; } From eea1525b77ed6ab619ce927bce4a1289905aaa82 Mon Sep 17 00:00:00 2001 From: Kenneth Chen <74205780+Chenneth@users.noreply.github.com> Date: Wed, 7 Dec 2022 22:58:32 -0600 Subject: [PATCH 04/33] Added support for bin key in send_messages --- api/discord/bot.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/api/discord/bot.php b/api/discord/bot.php index 01a3130f..832e3db6 100644 --- a/api/discord/bot.php +++ b/api/discord/bot.php @@ -69,7 +69,14 @@ public static function send_message($message, $channel_id, $attachments = null) { file_put_contents($path, $attachment['bin']); }*/ - if(isset($attachment['path'])) + if(isset($attachment['bin'])) + { + $file = tmpfile(); + $path = stream_get_meta_data($file)['uri']; + file_put_contents($path,$attachment['bin']); + $files["attachment{$k}"] = new CURLFile($path, $attachment['type'], "attachment{$k}." . mime2ext($attachment['type'])); + } + else if(isset($attachment['path'])) { $files["attachment{$k}"] = new CURLFile($attachment['path'],$attachment['type'], "attachments{$k}." . $attachment['type']); } From 126e1257de5300b44573a04014f3d64051b345f0 Mon Sep 17 00:00:00 2001 From: Kenneth Chen <74205780+Chenneth@users.noreply.github.com> Date: Thu, 8 Dec 2022 10:50:37 -0600 Subject: [PATCH 05/33] Changed JSON decode in function to a global array. Function should run a bit faster hopefully --- template/functions/mime2ext.php | 221 +++++++++++++++++--------------- 1 file changed, 117 insertions(+), 104 deletions(-) diff --git a/template/functions/mime2ext.php b/template/functions/mime2ext.php index 3ba463d6..63152fb0 100644 --- a/template/functions/mime2ext.php +++ b/template/functions/mime2ext.php @@ -1,4 +1,108 @@ array("image/png","image/x-png"), + "bmp"=>array("image/bmp","image/x-bmp","image/x-bitmap","image/x-xbitmap","image/x-win-bitmap","image/x-windows-bmp","image/ms-bmp","image/x-ms-bmp","application/bmp","application/x-bmp","application/x-win-bitmap"), + "gif"=>array("image/gif"), + "jpeg"=>array("image/jpeg","image/pjpeg"), + "xspf"=>array("application/xspf+xml"), + "vlc"=>array("application/videolan"), + "wmv"=>array("video/x-ms-wmv","video/x-ms-asf"), + "au"=>array("audio/x-au"), + "ac3"=>array("audio/ac3"), + "flac"=>array("audio/x-flac"), + "ogg"=>array("audio/ogg","video/ogg","application/ogg"), + "kmz"=>array("application/vnd.google-earth.kmz"), + "kml"=>array("application/vnd.google-earth.kml+xml"), + "rtx"=>array("text/richtext"), + "rtf"=>array("text/rtf"), + "jar"=>array("application/java-archive","application/x-java-application","application/x-jar"), + "zip"=>array("application/x-zip","application/zip","application/x-zip-compressed","application/s-compressed","multipart/x-zip"), + "7zip"=>array("application/x-compressed"), + "xml"=>array("application/xml","text/xml"), + "svg"=>array("image/svg+xml"), + "3g2"=>array("video/3gpp2"), + "3gp"=>array("video/3gp","video/3gpp"), + "mp4"=>array("video/mp4"), + "m4a"=>array("audio/x-m4a"), + "f4v"=>array("video/x-f4v"), + "flv"=>array("video/x-flv"), + "webm"=>array("video/webm"), + "aac"=>array("audio/x-acc"), + "m4u"=>array("application/vnd.mpegurl"), + "pdf"=>array("application/pdf","application/octet-stream"), + "pptx"=>array("application/vnd.openxmlformats-officedocument.presentationml.presentation"), + "ppt"=>array("application/powerpoint","application/vnd.ms-powerpoint","application/vnd.ms-office","application/msword"), + "docx"=>array("application/vnd.openxmlformats-officedocument.wordprocessingml.document"), + "xlsx"=>array("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.ms-excel"), + "xl"=>array("application/excel"), + "xls"=>array("application/msexcel","application/x-msexcel","application/x-ms-excel","application/x-excel","application/x-dos_ms_excel","application/xls","application/x-xls"), + "xsl"=>array("text/xsl"), + "mpeg"=>array("video/mpeg"), + "mov"=>array("video/quicktime"), + "avi"=>array("video/x-msvideo","video/msvideo","video/avi","application/x-troff-msvideo"), + "movie"=>array("video/x-sgi-movie"), + "log"=>array("text/x-log"), + "txt"=>array("text/plain"), + "css"=>array("text/css"), + "html"=>array("text/html"), + "wav"=>array("audio/x-wav","audio/wave","audio/wav"), + "xhtml"=>array("application/xhtml+xml"), + "tar"=>array("application/x-tar"), + "tgz"=>array("application/x-gzip-compressed"), + "psd"=>array("application/x-photoshop","image/vnd.adobe.photoshop"), + "exe"=>array("application/x-msdownload"), + "js"=>array("application/x-javascript"), + "mp3"=>array("audio/mpeg","audio/mpg","audio/mpeg3","audio/mp3"), + "rar"=>array("application/x-rar","application/rar","application/x-rar-compressed"), + "gzip"=>array("application/x-gzip"), + "hqx"=>array("application/mac-binhex40","application/mac-binhex","application/x-binhex40","application/x-mac-binhex40"), + "cpt"=>array("application/mac-compactpro"), + "bin"=>array("application/macbinary","application/mac-binary","application/x-binary","application/x-macbinary"), + "oda"=>array("application/oda"), + "ai"=>array("application/postscript"), + "smil"=>array("application/smil"), + "mif"=>array("application/vnd.mif"), + "wbxml"=>array("application/wbxml"), + "wmlc"=>array("application/wmlc"), + "dcr"=>array("application/x-director"), + "dvi"=>array("application/x-dvi"), + "gtar"=>array("application/x-gtar"), + "php"=>array("application/x-httpd-php","application/php","application/x-php","text/php","text/x-php","application/x-httpd-php-source"), + "swf"=>array("application/x-shockwave-flash"), + "sit"=>array("application/x-stuffit"), + "z"=>array("application/x-compress"), + "mid"=>array("audio/midi"), + "aif"=>array("audio/x-aiff","audio/aiff"), + "ram"=>array("audio/x-pn-realaudio"), + "rpm"=>array("audio/x-pn-realaudio-plugin"), + "ra"=>array("audio/x-realaudio"), + "rv"=>array("video/vnd.rn-realvideo"), + "jp2"=>array("image/jp2","video/mj2","image/jpx","image/jpm"), + "tiff"=>array("image/tiff"), + "eml"=>array("message/rfc822"), + "pem"=>array("application/x-x509-user-cert","application/x-pem-file"), + "p10"=>array("application/x-pkcs10","application/pkcs10"), + "p12"=>array("application/x-pkcs12"), + "p7a"=>array("application/x-pkcs7-signature"), + "p7c"=>array("application/pkcs7-mime","application/x-pkcs7-mime"), + "p7r"=>array("application/x-pkcs7-certreqresp"), + "p7s"=>array("application/pkcs7-signature"), + "crt"=>array("application/x-x509-ca-cert","application/pkix-cert"), + "crl"=>array("application/pkix-crl","application/pkcs-crl"), + "pgp"=>array("application/pgp"), + "gpg"=>array("application/gpg-keys"), + "rsa"=>array("application/x-pkcs7"), + "ics"=>array("text/calendar"), + "zsh"=>array("text/x-scriptzsh"), + "cdr"=>array("application/cdr","application/coreldraw","application/x-cdr","application/x-coreldraw","image/cdr","image/x-cdr","zz-application/zz-winassoc-cdr"), + "wma"=>array("audio/x-ms-wma"), + "vcf"=>array("text/x-vcard"), + "srt"=>array("text/srt"), + "vtt"=>array("text/vtt"), + "ico"=>array("image/x-icon","image/x-ico","image/vnd.microsoft.icon"), + "csv"=>array("text/x-comma-separated-values","text/comma-separated-values","application/vnd.msexcel"), + "json"=>array("application/json","text/json") +); function mime2ext($mime){ //I'm leaving this here to shame seb /*$all_mimes = '{ @@ -411,111 +515,8 @@ function mime2ext($mime){ "application\/json","text\/json" ]}';*/ //$all_mimes = json_decode($all_mimes,true); + global $mimes; - $mimes = array( - "png"=>array("image/png","image/x-png"), - "bmp"=>array("image/bmp","image/x-bmp","image/x-bitmap","image/x-xbitmap","image/x-win-bitmap","image/x-windows-bmp","image/ms-bmp","image/x-ms-bmp","application/bmp","application/x-bmp","application/x-win-bitmap"), - "gif"=>array("image/gif"), - "jpeg"=>array("image/jpeg","image/pjpeg"), - "xspf"=>array("application/xspf+xml"), - "vlc"=>array("application/videolan"), - "wmv"=>array("video/x-ms-wmv","video/x-ms-asf"), - "au"=>array("audio/x-au"), - "ac3"=>array("audio/ac3"), - "flac"=>array("audio/x-flac"), - "ogg"=>array("audio/ogg","video/ogg","application/ogg"), - "kmz"=>array("application/vnd.google-earth.kmz"), - "kml"=>array("application/vnd.google-earth.kml+xml"), - "rtx"=>array("text/richtext"), - "rtf"=>array("text/rtf"), - "jar"=>array("application/java-archive","application/x-java-application","application/x-jar"), - "zip"=>array("application/x-zip","application/zip","application/x-zip-compressed","application/s-compressed","multipart/x-zip"), - "7zip"=>array("application/x-compressed"), - "xml"=>array("application/xml","text/xml"), - "svg"=>array("image/svg+xml"), - "3g2"=>array("video/3gpp2"), - "3gp"=>array("video/3gp","video/3gpp"), - "mp4"=>array("video/mp4"), - "m4a"=>array("audio/x-m4a"), - "f4v"=>array("video/x-f4v"), - "flv"=>array("video/x-flv"), - "webm"=>array("video/webm"), - "aac"=>array("audio/x-acc"), - "m4u"=>array("application/vnd.mpegurl"), - "pdf"=>array("application/pdf","application/octet-stream"), - "pptx"=>array("application/vnd.openxmlformats-officedocument.presentationml.presentation"), - "ppt"=>array("application/powerpoint","application/vnd.ms-powerpoint","application/vnd.ms-office","application/msword"), - "docx"=>array("application/vnd.openxmlformats-officedocument.wordprocessingml.document"), - "xlsx"=>array("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.ms-excel"), - "xl"=>array("application/excel"), - "xls"=>array("application/msexcel","application/x-msexcel","application/x-ms-excel","application/x-excel","application/x-dos_ms_excel","application/xls","application/x-xls"), - "xsl"=>array("text/xsl"), - "mpeg"=>array("video/mpeg"), - "mov"=>array("video/quicktime"), - "avi"=>array("video/x-msvideo","video/msvideo","video/avi","application/x-troff-msvideo"), - "movie"=>array("video/x-sgi-movie"), - "log"=>array("text/x-log"), - "txt"=>array("text/plain"), - "css"=>array("text/css"), - "html"=>array("text/html"), - "wav"=>array("audio/x-wav","audio/wave","audio/wav"), - "xhtml"=>array("application/xhtml+xml"), - "tar"=>array("application/x-tar"), - "tgz"=>array("application/x-gzip-compressed"), - "psd"=>array("application/x-photoshop","image/vnd.adobe.photoshop"), - "exe"=>array("application/x-msdownload"), - "js"=>array("application/x-javascript"), - "mp3"=>array("audio/mpeg","audio/mpg","audio/mpeg3","audio/mp3"), - "rar"=>array("application/x-rar","application/rar","application/x-rar-compressed"), - "gzip"=>array("application/x-gzip"), - "hqx"=>array("application/mac-binhex40","application/mac-binhex","application/x-binhex40","application/x-mac-binhex40"), - "cpt"=>array("application/mac-compactpro"), - "bin"=>array("application/macbinary","application/mac-binary","application/x-binary","application/x-macbinary"), - "oda"=>array("application/oda"), - "ai"=>array("application/postscript"), - "smil"=>array("application/smil"), - "mif"=>array("application/vnd.mif"), - "wbxml"=>array("application/wbxml"), - "wmlc"=>array("application/wmlc"), - "dcr"=>array("application/x-director"), - "dvi"=>array("application/x-dvi"), - "gtar"=>array("application/x-gtar"), - "php"=>array("application/x-httpd-php","application/php","application/x-php","text/php","text/x-php","application/x-httpd-php-source"), - "swf"=>array("application/x-shockwave-flash"), - "sit"=>array("application/x-stuffit"), - "z"=>array("application/x-compress"), - "mid"=>array("audio/midi"), - "aif"=>array("audio/x-aiff","audio/aiff"), - "ram"=>array("audio/x-pn-realaudio"), - "rpm"=>array("audio/x-pn-realaudio-plugin"), - "ra"=>array("audio/x-realaudio"), - "rv"=>array("video/vnd.rn-realvideo"), - "jp2"=>array("image/jp2","video/mj2","image/jpx","image/jpm"), - "tiff"=>array("image/tiff"), - "eml"=>array("message/rfc822"), - "pem"=>array("application/x-x509-user-cert","application/x-pem-file"), - "p10"=>array("application/x-pkcs10","application/pkcs10"), - "p12"=>array("application/x-pkcs12"), - "p7a"=>array("application/x-pkcs7-signature"), - "p7c"=>array("application/pkcs7-mime","application/x-pkcs7-mime"), - "p7r"=>array("application/x-pkcs7-certreqresp"), - "p7s"=>array("application/pkcs7-signature"), - "crt"=>array("application/x-x509-ca-cert","application/pkix-cert"), - "crl"=>array("application/pkix-crl","application/pkcs-crl"), - "pgp"=>array("application/pgp"), - "gpg"=>array("application/gpg-keys"), - "rsa"=>array("application/x-pkcs7"), - "ics"=>array("text/calendar"), - "zsh"=>array("text/x-scriptzsh"), - "cdr"=>array("application/cdr","application/coreldraw","application/x-cdr","application/x-coreldraw","image/cdr","image/x-cdr","zz-application/zz-winassoc-cdr"), - "wma"=>array("audio/x-ms-wma"), - "vcf"=>array("text/x-vcard"), - "srt"=>array("text/srt"), - "vtt"=>array("text/vtt"), - "ico"=>array("image/x-icon","image/x-ico","image/vnd.microsoft.icon"), - "csv"=>array("text/x-comma-separated-values","text/comma-separated-values","application/vnd.msexcel"), - "json"=>array("application/json","text/json") - ); foreach ($mimes as $key => $value) { if(array_search($mime,$value) !== false) { @@ -524,4 +525,16 @@ function mime2ext($mime){ } return false; } + +function ext2mime($ext) +{ + global $mimes; + foreach($mimes as $key=>$value) + { + if($key===$ext) + { + return $value[0]; // I hope this works + } + } +} ?> \ No newline at end of file From 490b47748035826555dbb99906443539b774a4e6 Mon Sep 17 00:00:00 2001 From: Kenneth Chen <74205780+Chenneth@users.noreply.github.com> Date: Thu, 8 Dec 2022 10:51:53 -0600 Subject: [PATCH 06/33] Added support for adding attachments with file binary or path for send_messages --- api/discord/bot.php | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/api/discord/bot.php b/api/discord/bot.php index 832e3db6..cb805896 100644 --- a/api/discord/bot.php +++ b/api/discord/bot.php @@ -61,27 +61,29 @@ public static function send_message($message, $channel_id, $attachments = null) $data = $message; } + // Add files to array $files = array(); if ($attachments) { foreach ($attachments as $k => $attachment) { - - /*if(isset($attachment['bin'])) // It's a local file (hopefully) - { - file_put_contents($path, $attachment['bin']); - }*/ - if(isset($attachment['bin'])) + if(isset($attachment['bin'])) // Function caller passed the raw data to the arg { + // Since we have the data, we need to create a tmpfile to store that data for the CURLFile $file = tmpfile(); $path = stream_get_meta_data($file)['uri']; file_put_contents($path,$attachment['bin']); - $files["attachment{$k}"] = new CURLFile($path, $attachment['type'], "attachment{$k}." . mime2ext($attachment['type'])); +// $files["attachment{$k}"] = new CURLFile($path, $attachment['type'], "attachment{$k}." . mime2ext($attachment['type'])); + $file_type = $attachment['type']; + $file_mime = ext2mime($file_type); } - else if(isset($attachment['path'])) + else if(isset($attachment['path'])) // File exists on local machine { - $files["attachment{$k}"] = new CURLFile($attachment['path'],$attachment['type'], "attachments{$k}." . $attachment['type']); + $path = $attachment['path']; + $file_type = $attachment['type']; + $file_mime = ext2mime($file_type); +// $files["attachment{$k}"] = new CURLFile($attachment['path'],$attachment['type'], "attachments{$k}." . $attachment['type']); } - else // sebastian only insane people put curly braces on the same line - { + else // We assume the attachment is an online file that we need to download + { // sebastian only insane people put curly braces on the same line //$content = file_get_contents($attachment['url']); $file = tmpfile(); $path = stream_get_meta_data($file)['uri']; @@ -94,12 +96,17 @@ public static function send_message($message, $channel_id, $attachments = null) //error_log($content); file_put_contents($path, $content); + $file_mime = $attachment['type']; + $file_type = mime2ext($file_mime); //error_log($attachment['url']); //error_log($path); //error_log($content); - $files["attachment{$k}"] = new CURLFile($path, $attachment['type'], "attachment{$k}." . mime2ext($attachment['type'])); + + /*$files["attachment{$k}"] = new CURLFile($path, $attachment['type'], "attachment{$k}." . mime2ext($attachment['type']));*/ } + // CURLFile is a file with a bunch of delimiters in the binary so it can be sent as Form-data + $files["attachment{$k}"] = new CURLFile($path, $file_mime, "attachments{$k}" . $file_type); } } //error_log(var_export($files, true)); From 1c5f97b52f528e5adca31599d52e38dc6cf96ee1 Mon Sep 17 00:00:00 2001 From: Kenneth Chen <74205780+Chenneth@users.noreply.github.com> Date: Thu, 8 Dec 2022 11:16:31 -0600 Subject: [PATCH 07/33] Changed static array to const --- template/functions/mime2ext.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/template/functions/mime2ext.php b/template/functions/mime2ext.php index 63152fb0..21678d56 100644 --- a/template/functions/mime2ext.php +++ b/template/functions/mime2ext.php @@ -1,5 +1,5 @@ array("image/png","image/x-png"), "bmp"=>array("image/bmp","image/x-bmp","image/x-bitmap","image/x-xbitmap","image/x-win-bitmap","image/x-windows-bmp","image/ms-bmp","image/x-ms-bmp","application/bmp","application/x-bmp","application/x-win-bitmap"), "gif"=>array("image/gif"), @@ -515,10 +515,10 @@ function mime2ext($mime){ "application\/json","text\/json" ]}';*/ //$all_mimes = json_decode($all_mimes,true); - global $mimes; - foreach ($mimes as $key => $value) { + + foreach (MIMES as $key => $value) { if(array_search($mime,$value) !== false) { return $key; } @@ -529,7 +529,7 @@ function mime2ext($mime){ function ext2mime($ext) { global $mimes; - foreach($mimes as $key=>$value) + foreach(MIMES as $key=>$value) { if($key===$ext) { From 735acacab76cf542ea9dbf026f90e765aee6e03a Mon Sep 17 00:00:00 2001 From: Kenneth Chen <74205780+Chenneth@users.noreply.github.com> Date: Thu, 8 Dec 2022 11:48:12 -0600 Subject: [PATCH 08/33] Removed some commented-out code --- api/discord/bot.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/api/discord/bot.php b/api/discord/bot.php index cb805896..cf06fc5a 100644 --- a/api/discord/bot.php +++ b/api/discord/bot.php @@ -71,7 +71,6 @@ public static function send_message($message, $channel_id, $attachments = null) $file = tmpfile(); $path = stream_get_meta_data($file)['uri']; file_put_contents($path,$attachment['bin']); -// $files["attachment{$k}"] = new CURLFile($path, $attachment['type'], "attachment{$k}." . mime2ext($attachment['type'])); $file_type = $attachment['type']; $file_mime = ext2mime($file_type); } @@ -80,7 +79,6 @@ public static function send_message($message, $channel_id, $attachments = null) $path = $attachment['path']; $file_type = $attachment['type']; $file_mime = ext2mime($file_type); -// $files["attachment{$k}"] = new CURLFile($attachment['path'],$attachment['type'], "attachments{$k}." . $attachment['type']); } else // We assume the attachment is an online file that we need to download { // sebastian only insane people put curly braces on the same line From 3d02e097779c59d1d386f97b7f99814310a3a1b9 Mon Sep 17 00:00:00 2001 From: Kenneth Chen <74205780+Chenneth@users.noreply.github.com> Date: Sat, 17 Dec 2022 23:35:38 -0600 Subject: [PATCH 09/33] Fixed attachment to have the right type --- api/discord/bot.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/discord/bot.php b/api/discord/bot.php index cf06fc5a..990ed2c3 100644 --- a/api/discord/bot.php +++ b/api/discord/bot.php @@ -104,7 +104,7 @@ public static function send_message($message, $channel_id, $attachments = null) } // CURLFile is a file with a bunch of delimiters in the binary so it can be sent as Form-data - $files["attachment{$k}"] = new CURLFile($path, $file_mime, "attachments{$k}" . $file_type); + $files["attachment{$k}"] = new CURLFile($path, $file_mime, "attachments{$k}." . $file_type); } } //error_log(var_export($files, true)); From 31f81a0dcae50588780d38ffa6e76d752b213571 Mon Sep 17 00:00:00 2001 From: Kenneth Chen <74205780+Chenneth@users.noreply.github.com> Date: Sat, 17 Dec 2022 23:38:22 -0600 Subject: [PATCH 10/33] Added jpg mime support --- template/functions/mime2ext.php | 1 + 1 file changed, 1 insertion(+) diff --git a/template/functions/mime2ext.php b/template/functions/mime2ext.php index 21678d56..c3009007 100644 --- a/template/functions/mime2ext.php +++ b/template/functions/mime2ext.php @@ -4,6 +4,7 @@ "bmp"=>array("image/bmp","image/x-bmp","image/x-bitmap","image/x-xbitmap","image/x-win-bitmap","image/x-windows-bmp","image/ms-bmp","image/x-ms-bmp","application/bmp","application/x-bmp","application/x-win-bitmap"), "gif"=>array("image/gif"), "jpeg"=>array("image/jpeg","image/pjpeg"), + "jpg"=>array("image/jpg","image/pjpg"), "xspf"=>array("application/xspf+xml"), "vlc"=>array("application/videolan"), "wmv"=>array("video/x-ms-wmv","video/x-ms-asf"), From d1bf946dd77abd335fff08af0747553c069745de Mon Sep 17 00:00:00 2001 From: Kenneth Chen <74205780+Chenneth@users.noreply.github.com> Date: Mon, 19 Dec 2022 21:35:07 -0600 Subject: [PATCH 11/33] Removed unnecessary comments --- template/functions/mime2ext.php | 419 +------------------------------- 1 file changed, 3 insertions(+), 416 deletions(-) diff --git a/template/functions/mime2ext.php b/template/functions/mime2ext.php index c3009007..17e04c24 100644 --- a/template/functions/mime2ext.php +++ b/template/functions/mime2ext.php @@ -105,421 +105,7 @@ "json"=>array("application/json","text/json") ); function mime2ext($mime){ - //I'm leaving this here to shame seb - /*$all_mimes = '{ - "png": - [ - "image\/png", - "image\/x-png" - ], - "bmp": - [ - "image\/bmp","image\/x-bmp","image\/x-bitmap","image\/x-xbitmap","image\/x-win-bitmap","image\/x-windows-bmp","image\/ms-bmp","image\/x-ms-bmp","application\/bmp","application\/x-bmp","application\/x-win-bitmap" - ], - "gif": - [ - "image\/gif" - ], - "jpeg": - [ - "image\/jpeg","image\/pjpeg" - ], - "xspf": - [ - "application\/xspf+xml" - ], - "vlc": - [ - "application\/videolan" - ], - "wmv": - [ - "video\/x-ms-wmv","video\/x-ms-asf" - ], - "au": - [ - "audio\/x-au" - ], - "ac3": - [ - "audio\/ac3" - ],"flac": - [ - "audio\/x-flac" - ], - "ogg": - [ - "audio\/ogg","video\/ogg","application\/ogg" - ], - "kmz": - [ - "application\/vnd.google-earth.kmz" - ], - "kml": - [ - "application\/vnd.google-earth.kml+xml" - ], - "rtx": - [ - "text\/richtext" - ], - "rtf": - [ - "text\/rtf" - ], - "jar": - [ - "application\/java-archive","application\/x-java-application","application\/x-jar" - ], - "zip": - [ - "application\/x-zip","application\/zip","application\/x-zip-compressed","application\/s-compressed","multipart\/x-zip" - ], - "7zip": - [ - "application\/x-compressed" - ], - "xml": - [ - "application\/xml","text\/xml" - ], - "svg": - [ - "image\/svg+xml" - ], - "3g2": - [ - "video\/3gpp2" - ], - "3gp": - [ - "video\/3gp","video\/3gpp" - ], - "mp4": - [ - "video\/mp4" - ], - "m4a": - [ - "audio\/x-m4a" - ], - "f4v": - [ - "video\/x-f4v" - ], - "flv": - [ - "video\/x-flv" - ], - "webm": - [ - "video\/webm" - ], - "aac": - [ - "audio\/x-acc" - ], - "m4u": - [ - "application\/vnd.mpegurl" - ], - "pdf": - [ - "application\/pdf","application\/octet-stream" - ], - "pptx": - [ - "application\/vnd.openxmlformats-officedocument.presentationml.presentation" - ], - "ppt": - [ - "application\/powerpoint","application\/vnd.ms-powerpoint","application\/vnd.ms-office","application\/msword" - ], - "docx": - [ - "application\/vnd.openxmlformats-officedocument.wordprocessingml.document" - ], - "xlsx": - [ - "application\/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application\/vnd.ms-excel" - ], - "xl": - [ - "application\/excel" - ], - "xls": - [ - "application\/msexcel","application\/x-msexcel","application\/x-ms-excel","application\/x-excel","application\/x-dos_ms_excel","application\/xls","application\/x-xls" - ], - "xsl": - [ - "text\/xsl" - ], - "mpeg": - [ - "video\/mpeg" - ], - "mov": - [ - "video\/quicktime" - ], - "avi": - [ - "video\/x-msvideo","video\/msvideo","video\/avi","application\/x-troff-msvideo" - ], - "movie": - [ - "video\/x-sgi-movie" - ], - "log": - [ - "text\/x-log" - ], - "txt": - [ - "text\/plain" - ], - "css": - [ - "text\/css" - ], - "html": - [ - "text\/html" - ], - "wav": - [ - "audio\/x-wav","audio\/wave","audio\/wav" - ], - "xhtml": - [ - "application\/xhtml+xml" - ], - "tar": - [ - "application\/x-tar" - ], - "tgz": - [ - "application\/x-gzip-compressed" - ], - "psd": - [ - "application\/x-photoshop","image\/vnd.adobe.photoshop" - ], - "exe": - [ - "application\/x-msdownload" - ], - "js": - [ - "application\/x-javascript" - ], - "mp3": - [ - "audio\/mpeg","audio\/mpg","audio\/mpeg3","audio\/mp3" - ], - "rar": - [ - "application\/x-rar","application\/rar","application\/x-rar-compressed" - ], - "gzip": - [ - "application\/x-gzip" - ], - "hqx": - [ - "application\/mac-binhex40","application\/mac-binhex","application\/x-binhex40","application\/x-mac-binhex40" - ], - "cpt": - [ - "application\/mac-compactpro" - ], - "bin": - [ - "application\/macbinary","application\/mac-binary","application\/x-binary","application\/x-macbinary" - ], - "oda": - [ - "application\/oda" - ], - "ai": - [ - "application\/postscript" - ], - "smil": - [ - "application\/smil" - ], - "mif": - [ - "application\/vnd.mif" - ], - "wbxml": - [ - "application\/wbxml" - ], - "wmlc": - [ - "application\/wmlc" - ], - "dcr": - [ - "application\/x-director" - ], - "dvi": - [ - "application\/x-dvi" - ], - "gtar": - [ - "application\/x-gtar" - ], - "php": - [ - "application\/x-httpd-php","application\/php","application\/x-php","text\/php","text\/x-php","application\/x-httpd-php-source" - ], - "swf": - [ - "application\/x-shockwave-flash" - ], - "sit": - [ - "application\/x-stuffit" - ], - "z": - [ - "application\/x-compress" - ], - "mid": - [ - "audio\/midi" - ], - "aif": - [ - "audio\/x-aiff","audio\/aiff" - ], - "ram": - [ - "audio\/x-pn-realaudio" - ], - "rpm": - [ - "audio\/x-pn-realaudio-plugin" - ], - "ra": - [ - "audio\/x-realaudio" - ], - "rv": - [ - "video\/vnd.rn-realvideo" - ], - "jp2": - [ - "image\/jp2","video\/mj2","image\/jpx","image\/jpm" - ], - "tiff": - [ - "image\/tiff" - ], - "eml": - [ - "message\/rfc822" - ], - "pem": - [ - "application\/x-x509-user-cert","application\/x-pem-file" - ], - "p10": - [ - "application\/x-pkcs10","application\/pkcs10" - ], - "p12": - [ - "application\/x-pkcs12" - ], - "p7a": - [ - "application\/x-pkcs7-signature" - ], - "p7c": - [ - "application\/pkcs7-mime","application\/x-pkcs7-mime" - ], - "p7r": - [ - "application\/x-pkcs7-certreqresp" - ], - "p7s": - [ - "application\/pkcs7-signature" - ], - "crt": - [ - "application\/x-x509-ca-cert","application\/pkix-cert" - ], - "crl": - [ - "application\/pkix-crl","application\/pkcs-crl" - ], - "pgp": - [ - "application\/pgp" - ], - "gpg": - [ - "application\/gpg-keys" - ], - "rsa": - [ - "application\/x-pkcs7" - ], - "ics": - [ - "text\/calendar" - ], - "zsh": - [ - "text\/x-scriptzsh" - ], - "cdr": - [ - "application\/cdr","application\/coreldraw","application\/x-cdr","application\/x-coreldraw","image\/cdr","image\/x-cdr","zz-application\/zz-winassoc-cdr" - ], - "wma": - [ - "audio\/x-ms-wma" - ], - "vcf": - [ - "text\/x-vcard" - ], - "srt": - [ - "text\/srt" - ], - "vtt": - [ - "text\/vtt" - ], - "ico": - [ - "image\/x-icon","image\/x-ico","image\/vnd.microsoft.icon" - ], - "csv": - [ - "text\/x-comma-separated-values","text\/comma-separated-values","application\/vnd.msexcel" - ], - "json": - [ - "application\/json","text\/json" - ]}';*/ - //$all_mimes = json_decode($all_mimes,true); - - - - foreach (MIMES as $key => $value) { + foreach (MIMES as $key => $value) { if(array_search($mime,$value) !== false) { return $key; } @@ -534,8 +120,9 @@ function ext2mime($ext) { if($key===$ext) { - return $value[0]; // I hope this works + return $value[0]; } } + return false; } ?> \ No newline at end of file From 895181193c40a96b9712e03aa30b24477285690f Mon Sep 17 00:00:00 2001 From: Kenneth-W-Chen <74205780+Kenneth-W-Chen@users.noreply.github.com> Date: Tue, 16 Apr 2024 12:51:07 -0500 Subject: [PATCH 12/33] Changed nav script to use jquery/dom objects in array instead Also adjusted nav class changing to use DOM instead of jquery since jquery wasn't needed for that --- botathon/index.php | 54 ++++++++++++++++++++++++++++++---------------- 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/botathon/index.php b/botathon/index.php index 70e8a7d9..db94cd64 100644 --- a/botathon/index.php +++ b/botathon/index.php @@ -582,9 +582,25 @@ class="rd-parallax-layer section-top-75 section-md-top-150 section-lg-top-260"> footer(false); ?> From 04a3e436ed5214b7432418132b08bb9848b051bf Mon Sep 17 00:00:00 2001 From: Kenneth-W-Chen <74205780+Kenneth-W-Chen@users.noreply.github.com> Date: Tue, 16 Apr 2024 13:19:06 -0500 Subject: [PATCH 14/33] Nav initial active anchor is now set properly when page is already scrolled down before function loads --- botathon/index.php | 101 +++++++++++++++++++++++++-------------------- 1 file changed, 57 insertions(+), 44 deletions(-) diff --git a/botathon/index.php b/botathon/index.php index 2bdd57eb..e247e7d4 100644 --- a/botathon/index.php +++ b/botathon/index.php @@ -590,23 +590,50 @@ class="rd-parallax-layer section-top-75 section-md-top-150 section-lg-top-260"> let lastScrollTop = windowSelector.scrollTop() const downTolerance = 0.25 const upTolerance = 0.5 - $(window).scroll(function(){ + $(window).scroll(navChange); + + $(document).ready(function () { + // Add smooth scrolling to all links + $("#botathon-navigation ul li a").on('click', function (event) { + + // Make sure this.hash has a value before overriding default behavior + if (this.hash !== "") { + // Prevent default anchor click behavior + event.preventDefault(); + + // Store hash + var hash = this.hash; + + // Using jQuery's animate() method to add smooth page scroll + // The optional number (800) specifies the number of milliseconds it takes to scroll to the specified area + $('html, body').animate({ + scrollTop: $(hash).offset().top + }, 800, function () { + + // Add hash (#) to URL when done scrolling (default click behavior) + window.location.hash = hash; + }); + } // End if + }); + let scrollTop = windowSelector.scrollTop() + let scrollBottom = scrollTop + windowSelector.height() + for(let i = 0; i < 7; i++){ + let anchor = anchorSelectors[i]; + if(elementInView(anchor,scrollTop,scrollBottom)){ + switchActive(i) + break + } + } + }); + + function navChange(){ let currentScrollTop = windowSelector.scrollTop() let windowHeight = windowSelector.height() let scrollBottom = currentScrollTop + windowHeight - function elementInView(elem) - { - let elemTop = elem.offset().top + parseInt(elem.css('padding-top'),10) - let elemBottom = elemTop + elem.height() - return (elemTop <= currentScrollTop && elemBottom >= currentScrollTop) || (elemTop >= currentScrollTop && elemTop <= scrollBottom) || (elemBottom >= currentScrollTop && elemBottom <= scrollBottom) - } + function getTop(elem){return elem.offset().top + parseInt(elem.css('padding-top'),10)} function getBottom(elem) {return getTop(elem)+ elem.height()} - function switchActive(i){ - navSelectors[curIndex].classList.remove('active') - navSelectors[i].classList.add('active') - curIndex = i - } + if(currentScrollTop > lastScrollTop){ // scrolled down if(curIndex!==6 && Math.floor(getBottom(footerSelector))<= scrollBottom) @@ -621,7 +648,7 @@ function switchActive(i){ return } for(let i = curIndex+1;i<7;i++){ - if(elementInView(anchorSelectors[i])){ + if(elementInView(anchorSelectors[i]),currentScrollTop,scrollBottom){ switchActive(i) break } @@ -634,39 +661,25 @@ function switchActive(i){ return } for(let i = curIndex-1;i>=0;i--){ - if (elementInView(anchorSelectors[i])) { - switchActive(i) - break - } + if (elementInView(anchorSelectors[i],currentScrollTop,scrollBottom)) { + switchActive(i) + break + } } } } lastScrollTop = currentScrollTop - }); - - $(document).ready(function () { - // Add smooth scrolling to all links - $("#botathon-navigation ul li a").on('click', function (event) { - - // Make sure this.hash has a value before overriding default behavior - if (this.hash !== "") { - // Prevent default anchor click behavior - event.preventDefault(); - - // Store hash - var hash = this.hash; - - // Using jQuery's animate() method to add smooth page scroll - // The optional number (800) specifies the number of milliseconds it takes to scroll to the specified area - $('html, body').animate({ - scrollTop: $(hash).offset().top - }, 800, function () { - - // Add hash (#) to URL when done scrolling (default click behavior) - window.location.hash = hash; - }); - } // End if - }); - - }); + } + + function elementInView(elem,currentScrollTop,scrollBottom) + { + let elemTop = elem.offset().top + parseInt(elem.css('padding-top'),10) + let elemBottom = elemTop + elem.height() + return (elemTop <= currentScrollTop && elemBottom >= currentScrollTop) || (elemTop >= currentScrollTop && elemTop <= scrollBottom) || (elemBottom >= currentScrollTop && elemBottom <= scrollBottom) + } + function switchActive(i){ + navSelectors[curIndex].classList.remove('active') + navSelectors[i].classList.add('active') + curIndex = i + } From 36af6cdb7d03e58c89e08b5b5d68e4c0724eecb1 Mon Sep 17 00:00:00 2001 From: kenneth-w-chen <74205780+Kenneth-W-Chen@users.noreply.github.com> Date: Fri, 28 Jun 2024 20:07:03 -0500 Subject: [PATCH 15/33] Change querySelector to jQuery --- botathon/index.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/botathon/index.php b/botathon/index.php index e247e7d4..65bd0178 100644 --- a/botathon/index.php +++ b/botathon/index.php @@ -583,7 +583,7 @@ class="rd-parallax-layer section-top-75 section-md-top-150 section-lg-top-260"> ?> From 4f5207cc1d2550c355cf64146c7c7effb29b2464 Mon Sep 17 00:00:00 2001 From: kenneth-w-chen <74205780+Kenneth-W-Chen@users.noreply.github.com> Date: Fri, 28 Jun 2024 21:44:05 -0500 Subject: [PATCH 16/33] Remove curIndex --- botathon/index.php | 233 ++++++++++++++++++++++++++------------------- 1 file changed, 137 insertions(+), 96 deletions(-) diff --git a/botathon/index.php b/botathon/index.php index 65bd0178..f622bbcf 100644 --- a/botathon/index.php +++ b/botathon/index.php @@ -95,14 +95,17 @@ .robot-kit-row { } + .robot-kit-entry > div { height: 100%; border: 1px dotted black; margin: 2px; } + .robot-kit-entry h4 { text-align: center; } + .robot-kit-list li { background-color: #e1e1e1; padding: 5px; @@ -149,7 +152,8 @@ class="rd-parallax-layer section-top-75 section-md-top-150 section-lg-top-260">

Navigation

From ed7b62c271a55ed1c889e56466ba04d6677ff9b0 Mon Sep 17 00:00:00 2001 From: kenneth-w-chen <74205780+Kenneth-W-Chen@users.noreply.github.com> Date: Sat, 28 Sep 2024 15:01:52 -0500 Subject: [PATCH 20/33] Componentize bios --- about/our-alumni.php | 179 +++++++--------- about/our-team.php | 400 +++++++++++++----------------------- about/our-web-team.php | 387 ++++++++++------------------------ css/style.css | 9 +- template/functions/card.php | 53 +++++ 5 files changed, 394 insertions(+), 634 deletions(-) create mode 100644 template/functions/card.php diff --git a/about/our-alumni.php b/about/our-alumni.php index c0d08842..8207b19c 100644 --- a/about/our-alumni.php +++ b/about/our-alumni.php @@ -1,14 +1,79 @@ 'Nick Tindle', + 'title'=>'1st President', + 'description'=>"I am a Computer Engineering Student, The first president, and still an active member of the group", + 'picture_uri'=>'/images/bio-pics/nick-tindle.jpg', +// 'email'=>'', +// 'linkedin_url'=>'', +// 'github_url'=>'', +// 'twitter_url'=>'' +]; +$members[] = [ + 'name'=>'Juan Ruiz', + 'title'=>'2nd President', + 'description'=>"I am a Computer Engineering Student, I.T. Support Technician, and Undergrad Research Assistant at The University of North Texas. I am an active member of The Alpha Tau Omega Fraternity, Society of Hispanic Professional Engineers, Engineers without Borders, IEEE, and National Society of Professional Engineers. I have also interned at NASA, U.S. Department of Energy, and iOLAP. My focus is Embedded Systems but I have a strong passion for robotics, automation, machine learning, and artificial intelligence.", + 'picture_uri'=>'/images/bio-pics/juan-ruiz.jpg', +// 'email'=>'', +// 'linkedin_url'=>'', +// 'github_url'=>'', +// 'twitter_url'=>'' +]; +$members[] = [ + 'name'=>'Katie Lee', + 'title'=>'Former Secretary', + 'description'=>"I’m a transfer student from UH. I’m studying Computer Engineering because I want to be on the front of the newest technology development, and I’m the secretary for UNT Robotics.", + 'picture_uri'=>'/images/bio-pics/katie-lee.jpg', +// 'email'=>'', +// 'linkedin_url'=>'', +// 'github_url'=>'', +// 'twitter_url'=>'' +]; +$members[] = [ + 'name'=>'Michelle Rosal Vargas', + 'title'=>'Former Event Coordinator', + 'description'=>"Mechanical Engineer | Event Coordinator at UNT Robotics", + 'picture_uri'=>'/images/bio-pics/michelle-vargas.jpg', +// 'email'=>'', +// 'linkedin_url'=>'', +// 'github_url'=>'', +// 'twitter_url'=>'' +]; +$members[] = [ + 'name'=>'Andrew Jarrett', + 'title'=>'Former Public Relations', + 'description'=>"Mechanical Engineer | Public Relations at UNT Robotics", + 'picture_uri'=>'/images/bio-pics/andrew-jarrett.jpg', +// 'email'=>'', +// 'linkedin_url'=>'', +// 'github_url'=>'', +// 'twitter_url'=>'' +]; +$members[] = [ + 'name'=>'Nicole Kohm', + 'title'=>'Former Project Manager', + 'description'=>"I am an adaptive problem-solver with a lifetime of scientific passion. I enjoy applying what I learn to make new ideas and possibilities come to fruition. I have a strong track record of careful attention to detail and thinking outside the box. I frequently invent new technologies and methods to quickly solve multidisciplinary problems.", + 'picture_uri'=>'/images/bio-pics/nicole-kohm.jpg', +// 'email'=>'', +// 'linkedin_url'=>'', +// 'github_url'=>'', +// 'twitter_url'=>'' +]; +$members[] = [ + 'name'=>'Jesse Sullivan', + 'title'=>'Former Aerospace Division Lead', + 'description'=>"Jesse is a senior mechanical engineering student interested in all things that fly and go fast. He has 4 years of experience in amateur high-power rocketry and currently holds an L1 certification with the National Association of Rocketry. He founded the Aerospace Division with UNT Robotics in order to foster interest in the hobby and provide a learning experience for anyone to become a part of.", + 'picture_uri'=>'/images/bio-pics/jesse-sullivan.jpg', +// 'email'=>'', +// 'linkedin_url'=>'', +// 'github_url'=>'', +// 'twitter_url'=>'' +]; ?> -
- -
-
-
-
-
-
-
Nick Tindle1st President
-

I am a Computer Engineering Student, The first president, and still an active member of the group

-
-
-
-
- -
-
-
-
-
-
-
Juan Ruiz2nd President
-

I am a Computer Engineering Student, I.T. Support Technician, and Undergrad Research Assistant at The University of North Texas. I am an active member of The Alpha Tau Omega Fraternity, Society of Hispanic Professional Engineers, Engineers without Borders, IEEE, and National Society of Professional Engineers. I have also interned at NASA, U.S. Department of Energy, and iOLAP. My focus is Embedded Systems but I have a strong passion for robotics, automation, machine learning, and artificial intelligence.

-
-
-
-
- - -
-
-
-
-
-
-
Katie LeeFormer Secretary
-

I’m a transfer student from UH. I’m studying Computer Engineering because I want to be on the front of the newest technology development, and I’m the secretary for UNT Robotics.

-
-
-
-
- -
-
-
-
-
-
-
Michelle Rosal VargasFormer Event Coordinator
-

Mechanical Engineer | Event Coordinator at UNT Robotics

-
-
-
-
- -
-
-
-
-
-
-
Andy JarrettFormer Public Relations
-

Mechanical Engineer | Public Relations at UNT Robotics

-
-
-
-
- -
-
-
-
-
-
-
Nicole KohmFormer Project Manager
-

I am an adaptive problem-solver with a lifetime of scientific passion. I enjoy applying what I learn to make new ideas and possibilities come to fruition. I have a strong track record of careful attention to detail and thinking outside the box. I frequently invent new technologies and methods to quickly solve multidisciplinary problems.

-
-
-
-
- -
-
-
-
-
-
-
Jesse SullivanFormer Aerospace Division Lead
-

Jesse is a senior mechanical engineering student interested in all things that fly and go fast. He has 4 years of experience in amateur high-power rocketry and currently holds an L1 certification with the National Association of Rocketry. He founded the Aerospace Division with UNT Robotics in order to foster interest in the hobby and provide a learning experience for anyone to become a part of.

-
    -
-
-
-
-
- + diff --git a/about/our-team.php b/about/our-team.php index 524427a9..0a825947 100644 --- a/about/our-team.php +++ b/about/our-team.php @@ -1,14 +1,149 @@ 'Sebastian King', + 'title'=>'Co-President', + 'description'=>"Sebastian is a post-baccalaureate world languages student, with a degree in Computer Science. His role is to oversee the day-to-day running of the organisation and help ensure the organisation best serves the students at UNT. His expertise are programming and electrical engineering and he specialises in networking and remote control systems. He is also responsible for a lot of the more ambitious projects around campus, including the famous Sofabot and our re-usable weather balloon project.", + 'picture_uri'=>'/images/bio-pics/sebastian-king.jpg', + 'email'=>'president@untrobotics.com', + 'linkedin_url'=>'https://www.linkedin.com/in/sebastian-king', + 'github_url'=>'https://www.github.com/sebastian-king', + 'twitter_url'=>'https://www.twitter.com/@thekingseb' +]; +//co-president2 +$members[] = [ + 'name'=>'Lauren Caves', + 'title'=>'Co-President', + 'description'=> "She’s a woman of action, eternal optimist, and a passionate speaker. As an undergraduate mechanical engineering student, her enthusiasm for the art of engineering is vast and the hunger for discovery drives her motivation which has led to many successes during her undergraduate years. Although not easily. She has gone through many failures and complicated situations which shaped a new passion to inspire the youth and other students to overcome diversity and really fight for their dreams. She believes everyone is destined for greatness, and that it's important to not let the minor roadblocks we stumble upon crush the stars we wish upon.", + 'picture_uri'=>'/images/bio-pics/lauren-caves.jpg', + 'email'=>'president@untrobotics.com', + 'linkedin_url'=>'https://www.linkedin.com/in/lauren-caves', +// 'github_url'=>'', +// 'twitter_url'=>'' +]; +//vice president +$members[] = [ + 'name'=>'Tyler Adam Martinez', + 'title'=>'Vice President and Financial Director', + 'description'=>'Tyler is a junior currently studying electrical engineering with a minor in biomedical engineering. He focuses on robotics and automation, and loves designing cool circuits and building electronics.', + 'picture_uri'=>'/images/bio-pics/tyler-adam-martinez.jpg', + 'email'=>'vice-president@untrobotics.com', + 'linkedin_url'=>'https://www.linkedin.com/in/tyleradammartinez', + 'github_url'=>'https://www.github.com/TylerAdamMartinez', + // 'twitter_url'=>'' +]; +// financial director +//$officers[] = [ +// 'name'=>'Tyler Adam Martinez', +// 'title'=>'Vice President and Financial Director', +// 'description'=>'Tyler is a junior currently studying electrical engineering with a minor in biomedical engineering. He focuses on robotics and automation, and loves designing cool circuits and building electronics.', +// 'picture_uri'=>'/images/bio-pics/tyler-adam-martinez.jpg', +// 'email'=>'treasury@untrobotics.com', +// 'linkedin_url'=>'https://www.linkedin.com/in/tyleradammartinez', +// 'github_url'=>'https://www.github.com/TylerAdamMartinez', +// // 'twitter_url'=>'' +//]; + +// deputy financial director +$members[] = [ + 'name'=>'Andrew Paul', + 'title'=>'Deputy Financial Director', + 'description'=>'The Eagle Scout, Black Belt and Rescue scuba diver brings his vast experience keeping the funds up, and in check for the the future development of the robotics club. Andrew Paul is a freshman mechanical engineering student and lover of innovation. New to the scene with charisma to spare and a passion for engineering. He can be found climbing at the UNT Rockwall, or in his dorm finding out new ways to build and code his next project while assisting in club finances.', + 'picture_uri'=>'/images/bio-pics/andrew-paul.jpg', + 'email'=>'deputy-financial-director@untrobotics.com', +// 'linkedin_url'=>'', +// 'github_url'=>'', +// 'twitter_url'=>'' +]; +// Public Relations +$members[] = [ + 'name'=>'Jacob Gomez', + 'title'=>'Public Relations', + 'description'=>'Jacob is a current Computer Science student at UNT.Although he balances school and work he finds time for extracurriculars.He has always enjoyed being apart of different organizations and getting to know new people. He loves using all the different software to model, create and design things for the club or for his own personal projects.', + 'picture_uri'=>'/images/bio-pics/jacob-gomez.jpg', + 'email'=>'public-relations@untrobotics.com', +// 'linkedin_url'=>'', +// 'github_url'=>'', +// 'twitter_url'=>'' +]; + +// Event Coordinator +$members[] = [ + 'name'=>'Abdus Samee', + 'title'=>'Event Coordinator', + 'description'=>"Abdus Samee is an ECE graduate whose love for engineering must be seen to be believed. Being a former Toastmaster, he has a flair for speaking which convinces the listener to accept the facts that he puts forward. His never ending hunger for knowledge has enabled him to achieve a lot in a short time. Education is an ornament in prosperity and a refuge in adversity is what he says. Progress never comes without struggles, but his persistence helped him reach his dream destination. He is also the Vice Chair for UNT IEEE Robotics and Automation Society, and a IEEE Eta Kappa Nu Honor Student. The words of Ford inspired him to keep going. 'When everything seems to be going against you, remember that the airplane takes off against the wind and not with it.", + 'picture_uri'=>'/images/bio-pics/abdus-samee.jpg', + 'email'=>'event-coordinator@untrobotics.com', +// 'linkedin_url'=>'', +// 'github_url'=>'', +// 'twitter_url'=>'' +]; + +// Social Media Manager +$members[] = [ + 'name'=>'Ally Flores', + 'title'=>'Social Media Manager', + 'description'=>"Ally is a freshman majoring in mechanical engineering technology. She’s been in robotics since high school and is excited to continue it through college. She loves trying new hobbies and making new friends!", + 'picture_uri'=>'/images/bio-pics/ally-flores.jpg', + 'email'=>'corp-relations@untrobotics.com', +// 'linkedin_url'=>'', +// 'github_url'=>'', +// 'twitter_url'=>'' +]; + +// (lead) Webmaster +$members[] = [ + 'name'=>'Peyton Thibodeaux', + 'title'=>'Webmaster', + 'description'=>"Peyton is a junior, studying computer science with a minor in mathematics. He's the webmaster for UNT Robotics and in charge of the website that you see in front of you. He enjoys learning and using new technologies and have a passion for creating things.", + 'picture_uri'=>'/images/bio-pics/peyton-thibodeaux.jpg', + 'email'=>'webmaster@untrobotics.com', + 'linkedin_url'=>'https://www.linkedin.com/in/peyton-thibodeaux', +// 'github_url'=>'', +// 'twitter_url'=>'' +]; + +// Project Manager +$members[] = [ + 'name'=>'Nicholas Tindle', + 'title'=>'Project Manager', + 'description'=>"Nicholas Tindle is a Computer Engineering student at UNT. He works in software engineering and loves hackathons. You can generally find him wearing a hat and probably a sweatshirt. He has a long history of collaboration with UNT Robotics as the first president, a loyal advisor, and now Project Manager. He has also served as an advisor to the Dean and is currently an officer of Engineering United. Nick has helped host numerous events at the university over the years. In his professional life, he works in data analysis, web development, and python scripting.", + 'picture_uri'=>'/images/bio-pics/nick-tindle.jpg', + 'email'=>'project-manager@untrobotics.com', +// 'linkedin_url'=>'', +// 'github_url'=>'', +// 'twitter_url'=>'' +]; + +// Corporate Relations +$members[] = [ + 'name'=>'Ashank Annam', + 'title'=>'Corporate Relations', + 'description'=>"Ashank is a freshman studying Business Computer Information Systems. He has been interested in robotics since high school. He loves to meet new people and learn new technologies.", + 'picture_uri'=>'/images/bio-pics/ashank-annam.jpg', + 'email'=>'corp-relations@untrobotics.com', +// 'linkedin_url'=>'', +// 'github_url'=>'', +// 'twitter_url'=>'' +]; + +// Joe +$members[] = [ + 'name'=>'Joseph moore', + 'title'=>'Aerospace Division Lead', + 'description'=>"Joseph is a Junior Mechanical Engineering student. Formerly a US Marine Master Explosive Ordnance Disposal Technician (EOD), he has always tried to tinker with things and figure out how they work and is passionate about establishing and growing our High-Power Rocketry team into a nationally competitive force. Both through STEM outreach efforts and internal events, he hopes to generate interest and encourage everyone to get into hobby rocketry, and the sport of high power rocketry.", + 'picture_uri'=>'/images/bio-pics/joe-moore.jpg', + 'email'=>'aerospace@untrobotics.com', +// 'linkedin_url'=>'', +// 'github_url'=>'', +// 'twitter_url'=>'' +]; ?> -
diff --git a/about/our-web-team.php b/about/our-web-team.php index 60470306..50463ae7 100644 --- a/about/our-web-team.php +++ b/about/our-web-team.php @@ -1,17 +1,111 @@ 'Peyton Thibodeaux', + 'title'=>'Webmaster | Team Member', + 'description'=>"Peyton is a junior, studying computer science with a minor in mathematics. He's the webmaster for UNT Robotics and in charge of the website that you see in front of you. He enjoys learning and using new technologies and have a passion for creating things.", + 'picture_uri'=>'/images/web-team-pics/peyton-thibodeaux.jpg', + 'email'=>'webmaster@untrobotics.com', + 'linkedin_url'=>'https://www.linkedin.com/in/peyton-thibodeaux', + 'github_url'=>'https://www.github.com/peyton232', +// 'twitter_url'=>'' +]; +$members[] = [ + 'name'=>'Sebastian King', + 'title'=>'Alumni | Team Member', + 'description'=>"Sebastian is a post-baccalaureate world languages student, with a degree in Computer Science. His role is to oversee the day-to-day running of the organisation and help ensure the organisation best serves the students at UNT. His expertise are programming and electrical engineering and he specialises in networking and remote control systems. He is also responsible for a lot of the more ambitious projects around campus, including the famous Sofabot and our re-usable weather balloon project.", + 'picture_uri'=>'/images/web-team-pics/sebastian-king.jpg', +// 'email'=>'', + 'linkedin_url'=>'https://www.linkedin.com/in/sebastian-king', + 'github_url'=>'https://www.github.com/sebastian-king', +// 'twitter_url'=>'' +]; +$members[] = [ + 'name'=>'Nicholas Tindle', + 'title'=>'President | Team Member', + 'description'=>"Nicholas Tindle is a Computer Engineering student at UNT. He works in software engineering and loves hackathons. You can generally find him wearing a hat and probably a sweatshirt. He has a long history of collaboration with UNT Robotics as the first president, a loyal advisor, and now Project Manager. He has also served as an advisor to the Dean and is currently an officer of Engineering United. Nick has helped host numerous events at the university over the years. In his professional life, he works in data analysis, web development, and python scripting.", + 'picture_uri'=>'/images/web-team-pics/nick-tindle.jpg', +// 'email'=>'', + 'linkedin_url'=>'https://www.linkedin.com/in/ntindle', + 'github_url'=>'https://www.github.com/ntindle', +// 'twitter_url'=>'' +]; +$members[] = [ + 'name'=>'Henry Legay', + 'title'=>'Team Member', + 'description'=>"Henry Legay is a Computer Science Student at UNT focused on web development. He is a web developer in Robotics with ready applicable experience and a willingness to learn.", + 'picture_uri'=>'/images/web-team-pics/henry-legay.jpg', +// 'email'=>'', + 'linkedin_url'=>'https://www.linkedin.com/in/henrylegay', + 'github_url'=>'https://www.github.com/henlegay', +// 'twitter_url'=>'' +]; +$members[] = [ + 'name'=>'Mason Besmer', + 'title'=>'Team Member', + 'description'=>"Mason Besmer is a Computer Science student at UNT. He is a webmaster for UNT Robotics and participates in many student orgs. He creates many things and comes up with ideas for even more. In his free time, he likes to create environments for games and program the website in front of you. He likes organization and loves to tinker with things. Creator of his own magic mirror, Mason is a advocate for building his own electronics. Currently, he is working on a software solution for his Starcube. You can find out more about it on his LinkedIn.", + 'picture_uri'=>'/images/web-team-pics/mason-besmer.jpg', +// 'email'=>'', + 'linkedin_url'=>'https://www.linkedin.com/in/masonbesmer', + 'github_url'=>'https://www.github.com/shotbyapony', +// 'twitter_url'=>'' +]; +$members[] = [ + 'name'=>'Aryan Damle', + 'title'=>'Team Member', + 'description'=>"Aryan Damle is a Computer Science student at UNT. He is an aspiring full stack web developer and an avid Home Assistant enthusiast. He mentors a high school robotics team and loves to work on robots in his free time. You can find him at your local car meet on weekends if he isn't busy working on a robot or fixing something in his garage.", + 'picture_uri'=>'/images/web-team-pics/aryan-damle.jpg', +// 'email'=>'', + 'linkedin_url'=>'https://www.linkedin.com/in/aryan-damle-8691b11bb', + 'github_url'=>'https://www.github.com/aryan-damle', +// 'twitter_url'=>'' +]; +$members[] = [ + 'name'=>'Mary Plana', + 'title'=>'Team Member', + 'description'=>"Mary Plana is a Computer Science Student at UNT with studies focused on Front End Development. She loves designing and implementing the user interface of a project. She has a natural curiosity about the world and loves to learn and improve her skills. She is currently the president of Application Development Organization. She facilitates the meeting and leads student UI designers to design, implement, and improve the user interface of projects.", + 'picture_uri'=>'/images/web-team-pics/mary-plana.jpg', +// 'email'=>'', + 'linkedin_url'=>'https://www.linkedin.com/in/mary-plana', + 'github_url'=>'https://www.github.com/mcp31', +// 'twitter_url'=>'' +]; +$members[] = [ + 'name'=>'David Thompson', + 'title'=>'Team Member', + 'description'=>"David Thompson is a Computer Science Student at UNT with studies focused on Full Stack Development. He loves solving problems, learning new things, and is currently working with a start up on a social media application that is currently in Apple's TestFlight.", + 'picture_uri'=>'/images/web-team-pics/david-thompson.jpg', +// 'email'=>'', + 'linkedin_url'=>'https://www.linkedin.com/in/david-thompson-000', + 'github_url'=>'https://www.github.com/davidkt99', +// 'twitter_url'=>'' +]; + +$members[] = [ + 'name'=>'Samin Yasar', + 'title'=>'Team Member', + 'description'=>"Samin Yasar is a senior Computer Science student at UNT. He is a team member of UNT Robotics webmaster helping maintain UNT Robotics website. He is also a part of the Application Development Organization as a team member. He likes to learn new things and solve complex problems.", + 'picture_uri'=>'/images/web-team-pics/samin-yasar.jpg', +// 'email'=>'', + 'linkedin_url'=>'https://www.linkedin.com/in/samin2668', + 'github_url'=>'https://www.github.com/samin2668', +// 'twitter_url'=>'' +]; + +$members[] = [ + 'name'=>'Kenneth Chen', + 'title'=>'Team Member', + 'description'=>"Kenneth Chen is a Computer Science and Accounting student at UNT. As part of UNT Robotics, he's programmed helpful things, such as the controller connections for Botathon Season 3. He is also the financial director of UNT Robotics. He enjoys learnings and helping others and hopes to make the website more accessible.", + 'picture_uri'=>'/images/bio-pics/kenneth-chen.jpg', +// 'email'=>'', + 'linkedin_url'=>'https://www.linkedin.com/in/kenneth-w-chen', + 'github_url'=>'https://www.github.com/kenneth-w-chen', +// 'twitter_url'=>'' +]; ?> -
diff --git a/css/style.css b/css/style.css index 6d120f37..5048f399 100644 --- a/css/style.css +++ b/css/style.css @@ -48054,4 +48054,11 @@ header nav.rd-navbar-static.rd-navbar-secondary .rd-navbar-nav > li.thin { display: inline-block; margin: 0 auto; } -/*# sourceMappingURL=style.css.map */ \ No newline at end of file +/*# sourceMappingURL=style.css.map */ + +/*Adds a line above the bios in about/our-team, about/our-dev-team, and about/our-alumni*/ +.bio-area { + border-top: 2px solid #ececec; + margin-top: 10px; + padding-top: 10px; +} \ No newline at end of file diff --git a/template/functions/card.php b/template/functions/card.php new file mode 100644 index 00000000..b37e8416 --- /dev/null +++ b/template/functions/card.php @@ -0,0 +1,53 @@ +' . + "" . + ''; + } + if($linkedin_url !== null){ + $contact_links_html .= '
  • ' . + "" . + '
  • '; + } + if($github_url !== null){ + $contact_links_html .= '
  • ' . + "" . + '
  • '; + } + if($twitter_url !== null){ + $contact_links_html .= '
  • ' . + "" . + '
  • '; + } + + echo '
    ' . + '
    ' . + '
    ' . + "" . + '
    ' . + '
    ' . + '
    ' . + "

    {$name}

    {$title}
    " . + "

    {$description}

    " . + '
      ' . + $contact_links_html . + '
    ' . + '
    ' . + '
    ' . + '
    ' . + '
    '; +} \ No newline at end of file From 0d7824949dd1d42305c575cf8a547b0a60dccfdf Mon Sep 17 00:00:00 2001 From: Kenneth-W-Chen <74205780+Kenneth-W-Chen@users.noreply.github.com> Date: Thu, 3 Oct 2024 18:42:21 -0500 Subject: [PATCH 21/33] Review fixes --- {template/functions => about}/card.php | 0 about/our-alumni.php | 30 +------------------- about/our-team.php | 39 +------------------------- about/our-web-team.php | 21 +------------- css/style.css | 5 ++-- 5 files changed, 6 insertions(+), 89 deletions(-) rename {template/functions => about}/card.php (100%) diff --git a/template/functions/card.php b/about/card.php similarity index 100% rename from template/functions/card.php rename to about/card.php diff --git a/about/our-alumni.php b/about/our-alumni.php index 8207b19c..ac3d4dd9 100644 --- a/about/our-alumni.php +++ b/about/our-alumni.php @@ -1,6 +1,6 @@ '1st President', 'description'=>"I am a Computer Engineering Student, The first president, and still an active member of the group", 'picture_uri'=>'/images/bio-pics/nick-tindle.jpg', -// 'email'=>'', -// 'linkedin_url'=>'', -// 'github_url'=>'', -// 'twitter_url'=>'' ]; $members[] = [ 'name'=>'Juan Ruiz', 'title'=>'2nd President', 'description'=>"I am a Computer Engineering Student, I.T. Support Technician, and Undergrad Research Assistant at The University of North Texas. I am an active member of The Alpha Tau Omega Fraternity, Society of Hispanic Professional Engineers, Engineers without Borders, IEEE, and National Society of Professional Engineers. I have also interned at NASA, U.S. Department of Energy, and iOLAP. My focus is Embedded Systems but I have a strong passion for robotics, automation, machine learning, and artificial intelligence.", 'picture_uri'=>'/images/bio-pics/juan-ruiz.jpg', -// 'email'=>'', -// 'linkedin_url'=>'', -// 'github_url'=>'', -// 'twitter_url'=>'' ]; $members[] = [ 'name'=>'Katie Lee', 'title'=>'Former Secretary', 'description'=>"I’m a transfer student from UH. I’m studying Computer Engineering because I want to be on the front of the newest technology development, and I’m the secretary for UNT Robotics.", 'picture_uri'=>'/images/bio-pics/katie-lee.jpg', -// 'email'=>'', -// 'linkedin_url'=>'', -// 'github_url'=>'', -// 'twitter_url'=>'' ]; $members[] = [ 'name'=>'Michelle Rosal Vargas', 'title'=>'Former Event Coordinator', 'description'=>"Mechanical Engineer | Event Coordinator at UNT Robotics", 'picture_uri'=>'/images/bio-pics/michelle-vargas.jpg', -// 'email'=>'', -// 'linkedin_url'=>'', -// 'github_url'=>'', -// 'twitter_url'=>'' ]; $members[] = [ 'name'=>'Andrew Jarrett', 'title'=>'Former Public Relations', 'description'=>"Mechanical Engineer | Public Relations at UNT Robotics", 'picture_uri'=>'/images/bio-pics/andrew-jarrett.jpg', -// 'email'=>'', -// 'linkedin_url'=>'', -// 'github_url'=>'', -// 'twitter_url'=>'' ]; $members[] = [ 'name'=>'Nicole Kohm', 'title'=>'Former Project Manager', 'description'=>"I am an adaptive problem-solver with a lifetime of scientific passion. I enjoy applying what I learn to make new ideas and possibilities come to fruition. I have a strong track record of careful attention to detail and thinking outside the box. I frequently invent new technologies and methods to quickly solve multidisciplinary problems.", 'picture_uri'=>'/images/bio-pics/nicole-kohm.jpg', -// 'email'=>'', -// 'linkedin_url'=>'', -// 'github_url'=>'', -// 'twitter_url'=>'' ]; $members[] = [ 'name'=>'Jesse Sullivan', 'title'=>'Former Aerospace Division Lead', 'description'=>"Jesse is a senior mechanical engineering student interested in all things that fly and go fast. He has 4 years of experience in amateur high-power rocketry and currently holds an L1 certification with the National Association of Rocketry. He founded the Aerospace Division with UNT Robotics in order to foster interest in the hobby and provide a learning experience for anyone to become a part of.", 'picture_uri'=>'/images/bio-pics/jesse-sullivan.jpg', -// 'email'=>'', -// 'linkedin_url'=>'', -// 'github_url'=>'', -// 'twitter_url'=>'' ]; ?>
    diff --git a/about/our-team.php b/about/our-team.php index 0a825947..a59a78a2 100644 --- a/about/our-team.php +++ b/about/our-team.php @@ -1,6 +1,6 @@ '/images/bio-pics/lauren-caves.jpg', 'email'=>'president@untrobotics.com', 'linkedin_url'=>'https://www.linkedin.com/in/lauren-caves', -// 'github_url'=>'', -// 'twitter_url'=>'' ]; //vice president $members[] = [ @@ -35,19 +33,7 @@ 'email'=>'vice-president@untrobotics.com', 'linkedin_url'=>'https://www.linkedin.com/in/tyleradammartinez', 'github_url'=>'https://www.github.com/TylerAdamMartinez', - // 'twitter_url'=>'' ]; -// financial director -//$officers[] = [ -// 'name'=>'Tyler Adam Martinez', -// 'title'=>'Vice President and Financial Director', -// 'description'=>'Tyler is a junior currently studying electrical engineering with a minor in biomedical engineering. He focuses on robotics and automation, and loves designing cool circuits and building electronics.', -// 'picture_uri'=>'/images/bio-pics/tyler-adam-martinez.jpg', -// 'email'=>'treasury@untrobotics.com', -// 'linkedin_url'=>'https://www.linkedin.com/in/tyleradammartinez', -// 'github_url'=>'https://www.github.com/TylerAdamMartinez', -// // 'twitter_url'=>'' -//]; // deputy financial director $members[] = [ @@ -56,9 +42,6 @@ 'description'=>'The Eagle Scout, Black Belt and Rescue scuba diver brings his vast experience keeping the funds up, and in check for the the future development of the robotics club. Andrew Paul is a freshman mechanical engineering student and lover of innovation. New to the scene with charisma to spare and a passion for engineering. He can be found climbing at the UNT Rockwall, or in his dorm finding out new ways to build and code his next project while assisting in club finances.', 'picture_uri'=>'/images/bio-pics/andrew-paul.jpg', 'email'=>'deputy-financial-director@untrobotics.com', -// 'linkedin_url'=>'', -// 'github_url'=>'', -// 'twitter_url'=>'' ]; // Public Relations $members[] = [ @@ -67,9 +50,6 @@ 'description'=>'Jacob is a current Computer Science student at UNT.Although he balances school and work he finds time for extracurriculars.He has always enjoyed being apart of different organizations and getting to know new people. He loves using all the different software to model, create and design things for the club or for his own personal projects.', 'picture_uri'=>'/images/bio-pics/jacob-gomez.jpg', 'email'=>'public-relations@untrobotics.com', -// 'linkedin_url'=>'', -// 'github_url'=>'', -// 'twitter_url'=>'' ]; // Event Coordinator @@ -79,9 +59,6 @@ 'description'=>"Abdus Samee is an ECE graduate whose love for engineering must be seen to be believed. Being a former Toastmaster, he has a flair for speaking which convinces the listener to accept the facts that he puts forward. His never ending hunger for knowledge has enabled him to achieve a lot in a short time. Education is an ornament in prosperity and a refuge in adversity is what he says. Progress never comes without struggles, but his persistence helped him reach his dream destination. He is also the Vice Chair for UNT IEEE Robotics and Automation Society, and a IEEE Eta Kappa Nu Honor Student. The words of Ford inspired him to keep going. 'When everything seems to be going against you, remember that the airplane takes off against the wind and not with it.", 'picture_uri'=>'/images/bio-pics/abdus-samee.jpg', 'email'=>'event-coordinator@untrobotics.com', -// 'linkedin_url'=>'', -// 'github_url'=>'', -// 'twitter_url'=>'' ]; // Social Media Manager @@ -91,9 +68,6 @@ 'description'=>"Ally is a freshman majoring in mechanical engineering technology. She’s been in robotics since high school and is excited to continue it through college. She loves trying new hobbies and making new friends!", 'picture_uri'=>'/images/bio-pics/ally-flores.jpg', 'email'=>'corp-relations@untrobotics.com', -// 'linkedin_url'=>'', -// 'github_url'=>'', -// 'twitter_url'=>'' ]; // (lead) Webmaster @@ -104,8 +78,6 @@ 'picture_uri'=>'/images/bio-pics/peyton-thibodeaux.jpg', 'email'=>'webmaster@untrobotics.com', 'linkedin_url'=>'https://www.linkedin.com/in/peyton-thibodeaux', -// 'github_url'=>'', -// 'twitter_url'=>'' ]; // Project Manager @@ -115,9 +87,6 @@ 'description'=>"Nicholas Tindle is a Computer Engineering student at UNT. He works in software engineering and loves hackathons. You can generally find him wearing a hat and probably a sweatshirt. He has a long history of collaboration with UNT Robotics as the first president, a loyal advisor, and now Project Manager. He has also served as an advisor to the Dean and is currently an officer of Engineering United. Nick has helped host numerous events at the university over the years. In his professional life, he works in data analysis, web development, and python scripting.", 'picture_uri'=>'/images/bio-pics/nick-tindle.jpg', 'email'=>'project-manager@untrobotics.com', -// 'linkedin_url'=>'', -// 'github_url'=>'', -// 'twitter_url'=>'' ]; // Corporate Relations @@ -127,9 +96,6 @@ 'description'=>"Ashank is a freshman studying Business Computer Information Systems. He has been interested in robotics since high school. He loves to meet new people and learn new technologies.", 'picture_uri'=>'/images/bio-pics/ashank-annam.jpg', 'email'=>'corp-relations@untrobotics.com', -// 'linkedin_url'=>'', -// 'github_url'=>'', -// 'twitter_url'=>'' ]; // Joe @@ -139,9 +105,6 @@ 'description'=>"Joseph is a Junior Mechanical Engineering student. Formerly a US Marine Master Explosive Ordnance Disposal Technician (EOD), he has always tried to tinker with things and figure out how they work and is passionate about establishing and growing our High-Power Rocketry team into a nationally competitive force. Both through STEM outreach efforts and internal events, he hopes to generate interest and encourage everyone to get into hobby rocketry, and the sport of high power rocketry.", 'picture_uri'=>'/images/bio-pics/joe-moore.jpg', 'email'=>'aerospace@untrobotics.com', -// 'linkedin_url'=>'', -// 'github_url'=>'', -// 'twitter_url'=>'' ]; ?>
    diff --git a/about/our-web-team.php b/about/our-web-team.php index 50463ae7..d649a3e6 100644 --- a/about/our-web-team.php +++ b/about/our-web-team.php @@ -1,6 +1,6 @@ 'webmaster@untrobotics.com', 'linkedin_url'=>'https://www.linkedin.com/in/peyton-thibodeaux', 'github_url'=>'https://www.github.com/peyton232', -// 'twitter_url'=>'' ]; $members[] = [ 'name'=>'Sebastian King', 'title'=>'Alumni | Team Member', 'description'=>"Sebastian is a post-baccalaureate world languages student, with a degree in Computer Science. His role is to oversee the day-to-day running of the organisation and help ensure the organisation best serves the students at UNT. His expertise are programming and electrical engineering and he specialises in networking and remote control systems. He is also responsible for a lot of the more ambitious projects around campus, including the famous Sofabot and our re-usable weather balloon project.", 'picture_uri'=>'/images/web-team-pics/sebastian-king.jpg', -// 'email'=>'', 'linkedin_url'=>'https://www.linkedin.com/in/sebastian-king', 'github_url'=>'https://www.github.com/sebastian-king', -// 'twitter_url'=>'' ]; $members[] = [ 'name'=>'Nicholas Tindle', 'title'=>'President | Team Member', 'description'=>"Nicholas Tindle is a Computer Engineering student at UNT. He works in software engineering and loves hackathons. You can generally find him wearing a hat and probably a sweatshirt. He has a long history of collaboration with UNT Robotics as the first president, a loyal advisor, and now Project Manager. He has also served as an advisor to the Dean and is currently an officer of Engineering United. Nick has helped host numerous events at the university over the years. In his professional life, he works in data analysis, web development, and python scripting.", 'picture_uri'=>'/images/web-team-pics/nick-tindle.jpg', -// 'email'=>'', 'linkedin_url'=>'https://www.linkedin.com/in/ntindle', 'github_url'=>'https://www.github.com/ntindle', -// 'twitter_url'=>'' ]; $members[] = [ 'name'=>'Henry Legay', 'title'=>'Team Member', 'description'=>"Henry Legay is a Computer Science Student at UNT focused on web development. He is a web developer in Robotics with ready applicable experience and a willingness to learn.", 'picture_uri'=>'/images/web-team-pics/henry-legay.jpg', -// 'email'=>'', 'linkedin_url'=>'https://www.linkedin.com/in/henrylegay', 'github_url'=>'https://www.github.com/henlegay', -// 'twitter_url'=>'' ]; $members[] = [ 'name'=>'Mason Besmer', 'title'=>'Team Member', 'description'=>"Mason Besmer is a Computer Science student at UNT. He is a webmaster for UNT Robotics and participates in many student orgs. He creates many things and comes up with ideas for even more. In his free time, he likes to create environments for games and program the website in front of you. He likes organization and loves to tinker with things. Creator of his own magic mirror, Mason is a advocate for building his own electronics. Currently, he is working on a software solution for his Starcube. You can find out more about it on his LinkedIn.", 'picture_uri'=>'/images/web-team-pics/mason-besmer.jpg', -// 'email'=>'', 'linkedin_url'=>'https://www.linkedin.com/in/masonbesmer', 'github_url'=>'https://www.github.com/shotbyapony', -// 'twitter_url'=>'' ]; $members[] = [ 'name'=>'Aryan Damle', 'title'=>'Team Member', 'description'=>"Aryan Damle is a Computer Science student at UNT. He is an aspiring full stack web developer and an avid Home Assistant enthusiast. He mentors a high school robotics team and loves to work on robots in his free time. You can find him at your local car meet on weekends if he isn't busy working on a robot or fixing something in his garage.", 'picture_uri'=>'/images/web-team-pics/aryan-damle.jpg', -// 'email'=>'', 'linkedin_url'=>'https://www.linkedin.com/in/aryan-damle-8691b11bb', 'github_url'=>'https://www.github.com/aryan-damle', -// 'twitter_url'=>'' ]; $members[] = [ 'name'=>'Mary Plana', 'title'=>'Team Member', 'description'=>"Mary Plana is a Computer Science Student at UNT with studies focused on Front End Development. She loves designing and implementing the user interface of a project. She has a natural curiosity about the world and loves to learn and improve her skills. She is currently the president of Application Development Organization. She facilitates the meeting and leads student UI designers to design, implement, and improve the user interface of projects.", 'picture_uri'=>'/images/web-team-pics/mary-plana.jpg', -// 'email'=>'', 'linkedin_url'=>'https://www.linkedin.com/in/mary-plana', 'github_url'=>'https://www.github.com/mcp31', -// 'twitter_url'=>'' ]; $members[] = [ 'name'=>'David Thompson', 'title'=>'Team Member', 'description'=>"David Thompson is a Computer Science Student at UNT with studies focused on Full Stack Development. He loves solving problems, learning new things, and is currently working with a start up on a social media application that is currently in Apple's TestFlight.", 'picture_uri'=>'/images/web-team-pics/david-thompson.jpg', -// 'email'=>'', 'linkedin_url'=>'https://www.linkedin.com/in/david-thompson-000', 'github_url'=>'https://www.github.com/davidkt99', -// 'twitter_url'=>'' ]; $members[] = [ @@ -89,10 +74,8 @@ 'title'=>'Team Member', 'description'=>"Samin Yasar is a senior Computer Science student at UNT. He is a team member of UNT Robotics webmaster helping maintain UNT Robotics website. He is also a part of the Application Development Organization as a team member. He likes to learn new things and solve complex problems.", 'picture_uri'=>'/images/web-team-pics/samin-yasar.jpg', -// 'email'=>'', 'linkedin_url'=>'https://www.linkedin.com/in/samin2668', 'github_url'=>'https://www.github.com/samin2668', -// 'twitter_url'=>'' ]; $members[] = [ @@ -100,10 +83,8 @@ 'title'=>'Team Member', 'description'=>"Kenneth Chen is a Computer Science and Accounting student at UNT. As part of UNT Robotics, he's programmed helpful things, such as the controller connections for Botathon Season 3. He is also the financial director of UNT Robotics. He enjoys learnings and helping others and hopes to make the website more accessible.", 'picture_uri'=>'/images/bio-pics/kenneth-chen.jpg', -// 'email'=>'', 'linkedin_url'=>'https://www.linkedin.com/in/kenneth-w-chen', 'github_url'=>'https://www.github.com/kenneth-w-chen', -// 'twitter_url'=>'' ]; ?>
    diff --git a/css/style.css b/css/style.css index 5048f399..7cc47575 100644 --- a/css/style.css +++ b/css/style.css @@ -48054,11 +48054,12 @@ header nav.rd-navbar-static.rd-navbar-secondary .rd-navbar-nav > li.thin { display: inline-block; margin: 0 auto; } -/*# sourceMappingURL=style.css.map */ /*Adds a line above the bios in about/our-team, about/our-dev-team, and about/our-alumni*/ .bio-area { border-top: 2px solid #ececec; margin-top: 10px; padding-top: 10px; -} \ No newline at end of file +} + +/*# sourceMappingURL=style.css.map */ From e990cc6806d40c882be5b5d44bdda4a07ebb721f Mon Sep 17 00:00:00 2001 From: kenneth-w-chen <74205780+Kenneth-W-Chen@users.noreply.github.com> Date: Sat, 12 Oct 2024 11:32:18 -0500 Subject: [PATCH 22/33] Fix temp file handles being closed early --- api/discord/bot.php | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/api/discord/bot.php b/api/discord/bot.php index 6fb46c2b..a6979a6c 100644 --- a/api/discord/bot.php +++ b/api/discord/bot.php @@ -5,7 +5,7 @@ class DiscordBot { protected static function send_api_request($URI, $method = 'GET', $content_type = "application/json", $data = null, $files = null) { $ch = curl_init(); - + $headers = array(); $headers[] = 'Authorization: Bot ' . static::AUTH_TOKEN; $headers[] = 'Content-Type: ' . $content_type; //multipart/form-data'; @@ -41,18 +41,18 @@ protected static function send_api_request($URI, $method = 'GET', $content_type if (curl_errno($ch)) { throw new DiscordBotException("Error occurred when making API request: '" . curl_error($ch) . "'" . "(" . curl_errno($ch) . ")"); } - + $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); - + curl_close($ch); - + $response = new stdClass(); $response->result = json_decode($result); $response->status_code = $status_code; return $response; } - + public static function send_message($message, $channel_id, $attachments = null) { if (is_string($message)) { $data = new stdClass(); // can't be bothered right now to make a class @@ -63,12 +63,15 @@ public static function send_message($message, $channel_id, $attachments = null) // Add files to array $files = array(); + /** @noinspection PhpArrayUsedOnlyForWriteInspection */ + $tmp_files = []; // needed if more than 1 attachment to prevent gc for deleting the temp files if ($attachments) { foreach ($attachments as $k => $attachment) { if(isset($attachment['bin'])) // Function caller passed the raw data to the arg { // Since we have the data, we need to create a tmpfile to store that data for the CURLFile $file = tmpfile(); + $tmp_files[] = $file; $path = stream_get_meta_data($file)['uri']; file_put_contents($path,$attachment['bin']); $file_type = $attachment['type']; @@ -84,6 +87,7 @@ public static function send_message($message, $channel_id, $attachments = null) { // sebastian only insane people put curly braces on the same line //$content = file_get_contents($attachment['url']); $file = tmpfile(); + $tmp_files[] = $file; $path = stream_get_meta_data($file)['uri']; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $attachment['url']); @@ -108,18 +112,18 @@ public static function send_message($message, $channel_id, $attachments = null) } } //error_log(var_export($files, true)); - + return static::send_api_request("/channels/{$channel_id}/messages", 'POST', 'multipart/form-data', $data, $files); } - + public static function add_user_role($guild_id, $user_id, $role_id) { return static::send_api_request("/guilds/{$guild_id}/members/{$user_id}/roles/{$role_id}", 'PUT'); } - + public static function remove_user_role($guild_id, $user_id, $role_id) { return static::send_api_request("/guilds/{$guild_id}/members/{$user_id}/roles/{$role_id}", 'DELETE'); } - + public static function type($channel_id) { return static::send_api_request("/channels/{$channel_id}/typing", 'POST'); } @@ -133,7 +137,7 @@ public static function hasHitRateLimit($result) { return $result->status_code == 429; } } - + class DiscordBotException extends Exception { public function __construct($message, $code = 0, Exception $previous = null) { parent::__construct($message, $code, $previous); From 7dad713e716db0999223223703ae7f3a99acff95 Mon Sep 17 00:00:00 2001 From: kenneth-w-chen <74205780+Kenneth-W-Chen@users.noreply.github.com> Date: Sat, 12 Oct 2024 21:40:01 -0500 Subject: [PATCH 23/33] Replace $file var with reference to $tmp_files --- api/discord/bot.php | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/api/discord/bot.php b/api/discord/bot.php index a6979a6c..e6c03a0a 100644 --- a/api/discord/bot.php +++ b/api/discord/bot.php @@ -63,16 +63,14 @@ public static function send_message($message, $channel_id, $attachments = null) // Add files to array $files = array(); - /** @noinspection PhpArrayUsedOnlyForWriteInspection */ $tmp_files = []; // needed if more than 1 attachment to prevent gc for deleting the temp files if ($attachments) { foreach ($attachments as $k => $attachment) { if(isset($attachment['bin'])) // Function caller passed the raw data to the arg { // Since we have the data, we need to create a tmpfile to store that data for the CURLFile - $file = tmpfile(); - $tmp_files[] = $file; - $path = stream_get_meta_data($file)['uri']; + $tmp_files[$k] = tmpfile(); + $path = stream_get_meta_data($tmp_files[$k])['uri']; file_put_contents($path,$attachment['bin']); $file_type = $attachment['type']; $file_mime = ext2mime($file_type); @@ -86,9 +84,8 @@ public static function send_message($message, $channel_id, $attachments = null) else // We assume the attachment is an online file that we need to download { // sebastian only insane people put curly braces on the same line //$content = file_get_contents($attachment['url']); - $file = tmpfile(); - $tmp_files[] = $file; - $path = stream_get_meta_data($file)['uri']; + $tmp_files[$k] = tmpfile(); + $path = stream_get_meta_data($tmp_files[$k])['uri']; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $attachment['url']); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); From c509d85779eb9bd3bc008ff7679a3183ef91fd4b Mon Sep 17 00:00:00 2001 From: Kenneth-W-Chen <74205780+Kenneth-W-Chen@users.noreply.github.com> Date: Tue, 15 Oct 2024 17:26:54 -0500 Subject: [PATCH 24/33] Use tabs for indent --- merch/product.php | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/merch/product.php b/merch/product.php index 107a669e..e9494ca2 100644 --- a/merch/product.php +++ b/merch/product.php @@ -63,10 +63,10 @@ $back_file = $selected_variant->get_file_by_type(PrintfulVariantFilesTypes::BACK); head("Buy {$product->get_name()}", true); - $category_name = strtolower(preg_replace('@^.*\(([^()]+)\)$@i', '$1', $product->get_name())); - if($category_name !== 'gear' && $category_name[-1]!=='s'){ - $category_name .= 's'; - } + $category_name = strtolower(preg_replace('@^.*\(([^()]+)\)$@i', '$1', $product->get_name())); + if($category_name !== 'gear' && $category_name[-1]!=='s'){ + $category_name .= 's'; + } } else { head("Invalid Product", true); @@ -103,8 +103,8 @@ function get_variant_variant($variant_name) { width: 100%; } .merch-section h6 { - border-bottom: 1px solid #a7a7a7; - margin-bottom: 5px; + border-bottom: 1px solid #a7a7a7; + margin-bottom: 5px; } .product-price { color: red; @@ -130,9 +130,9 @@ function get_variant_variant($variant_name) { } .variant-btn-container { display: block; - height: 50px; - width: 100px; - position: relative; + height: 50px; + width: 100px; + position: relative; } .variant-btn { border: 1px solid #d8d8d8; @@ -164,9 +164,9 @@ function get_variant_variant($variant_name) { @@ -325,7 +325,7 @@ class="btn variant-btn" //echo $button['btn']; $button = $payment_button->get_button(); if ($button->error === false) { - echo "button success"; + echo "button success"; echo $payment_button->get_button()->button; } else { // TODO: Alert From 13d1f0b92732a083c43c2bfe79c8ea764f619420 Mon Sep 17 00:00:00 2001 From: Sebastian King Date: Sat, 16 Nov 2024 21:15:56 +0000 Subject: [PATCH 25/33] FIX CASING! --- sql/migrations/urw-64.sql | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/sql/migrations/urw-64.sql b/sql/migrations/urw-64.sql index 30631c63..91239695 100644 --- a/sql/migrations/urw-64.sql +++ b/sql/migrations/urw-64.sql @@ -7,7 +7,4 @@ MODIFY name char(128) NOT NULL; ALTER TABLE ftpusers MODIFY passwd char(128) NOT NULL; - - - - +CREATE TABLE ftpinvites (id int primary key auto_increment, email varchar(255), registration_token varchar(16)); From 5cc9d5f50f52014f2656ddd3853fc9ac96763843 Mon Sep 17 00:00:00 2001 From: Sebastian King Date: Sat, 16 Nov 2024 16:11:40 -0600 Subject: [PATCH 26/33] URW-0: add myself to the website --- about/our-web-team.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/about/our-web-team.php b/about/our-web-team.php index d649a3e6..38226a7e 100644 --- a/about/our-web-team.php +++ b/about/our-web-team.php @@ -4,7 +4,7 @@ head('Our Team', true); $members = array(); $members[] = [ - 'name'=>'Peyton Thibodeaux', + 'name'=>'Peyton Thibodeaux 2', 'title'=>'Webmaster | Team Member', 'description'=>"Peyton is a junior, studying computer science with a minor in mathematics. He's the webmaster for UNT Robotics and in charge of the website that you see in front of you. He enjoys learning and using new technologies and have a passion for creating things.", 'picture_uri'=>'/images/web-team-pics/peyton-thibodeaux.jpg', From ea50e6972dadfddcbf1d9e8fc5a0e1179759784f Mon Sep 17 00:00:00 2001 From: Truitt Crozier Date: Sat, 16 Nov 2024 16:13:11 -0600 Subject: [PATCH 27/33] URW-0: added myself to the website --- about/our-web-team.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/about/our-web-team.php b/about/our-web-team.php index d649a3e6..48af02e3 100644 --- a/about/our-web-team.php +++ b/about/our-web-team.php @@ -86,6 +86,14 @@ 'linkedin_url'=>'https://www.linkedin.com/in/kenneth-w-chen', 'github_url'=>'https://www.github.com/kenneth-w-chen', ]; +$members[] = [ + 'name'=>'Truitt Crozier', + 'title'=>'Team Member', + 'description'=>"Truitt Crozier is a sophomore Computer Science student at UNT. His passions are learning about video game console architecture, collecting music, and playing Tetris. As a part of UNT Robotics, he is involved with programming and electronics.", + 'picture_uri'=>'/images/bio-pics/truitt-crozier.jpg', + 'linkedin_url'=>'https://www.linkedin.com/in/truitt-crozier-719355293', + 'github_url'=>'https://github.com/tjcrozier', +]; ?>
    From 070a5aaa3ccc81b6056410f3f194ac79912f76fc Mon Sep 17 00:00:00 2001 From: Truitt Crozier Date: Sat, 16 Nov 2024 16:21:31 -0600 Subject: [PATCH 28/33] URW0: removed 2 from peyton thibodeaux --- about/our-web-team.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/about/our-web-team.php b/about/our-web-team.php index 9820b2ff..48af02e3 100644 --- a/about/our-web-team.php +++ b/about/our-web-team.php @@ -4,7 +4,7 @@ head('Our Team', true); $members = array(); $members[] = [ - 'name'=>'Peyton Thibodeaux 2', + 'name'=>'Peyton Thibodeaux', 'title'=>'Webmaster | Team Member', 'description'=>"Peyton is a junior, studying computer science with a minor in mathematics. He's the webmaster for UNT Robotics and in charge of the website that you see in front of you. He enjoys learning and using new technologies and have a passion for creating things.", 'picture_uri'=>'/images/web-team-pics/peyton-thibodeaux.jpg', From 3f350f8a6ff53bd43922b2ca7d791d8b6cbca40d Mon Sep 17 00:00:00 2001 From: WillowHouchin Date: Sat, 16 Nov 2024 16:22:36 -0600 Subject: [PATCH 29/33] add willow to web team bio --- about/our-web-team.php | 38 ++++++++++++++++++++++++++++- images/bio-pics/willow-houchin.jpg | Bin 0 -> 24460 bytes 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 images/bio-pics/willow-houchin.jpg diff --git a/about/our-web-team.php b/about/our-web-team.php index d649a3e6..2203661b 100644 --- a/about/our-web-team.php +++ b/about/our-web-team.php @@ -1,6 +1,6 @@ 'webmaster@untrobotics.com', 'linkedin_url'=>'https://www.linkedin.com/in/peyton-thibodeaux', 'github_url'=>'https://www.github.com/peyton232', +// 'twitter_url'=>'' ]; $members[] = [ 'name'=>'Sebastian King', 'title'=>'Alumni | Team Member', 'description'=>"Sebastian is a post-baccalaureate world languages student, with a degree in Computer Science. His role is to oversee the day-to-day running of the organisation and help ensure the organisation best serves the students at UNT. His expertise are programming and electrical engineering and he specialises in networking and remote control systems. He is also responsible for a lot of the more ambitious projects around campus, including the famous Sofabot and our re-usable weather balloon project.", 'picture_uri'=>'/images/web-team-pics/sebastian-king.jpg', +// 'email'=>'', 'linkedin_url'=>'https://www.linkedin.com/in/sebastian-king', 'github_url'=>'https://www.github.com/sebastian-king', +// 'twitter_url'=>'' ]; $members[] = [ 'name'=>'Nicholas Tindle', 'title'=>'President | Team Member', 'description'=>"Nicholas Tindle is a Computer Engineering student at UNT. He works in software engineering and loves hackathons. You can generally find him wearing a hat and probably a sweatshirt. He has a long history of collaboration with UNT Robotics as the first president, a loyal advisor, and now Project Manager. He has also served as an advisor to the Dean and is currently an officer of Engineering United. Nick has helped host numerous events at the university over the years. In his professional life, he works in data analysis, web development, and python scripting.", 'picture_uri'=>'/images/web-team-pics/nick-tindle.jpg', +// 'email'=>'', 'linkedin_url'=>'https://www.linkedin.com/in/ntindle', 'github_url'=>'https://www.github.com/ntindle', +// 'twitter_url'=>'' ]; $members[] = [ 'name'=>'Henry Legay', 'title'=>'Team Member', 'description'=>"Henry Legay is a Computer Science Student at UNT focused on web development. He is a web developer in Robotics with ready applicable experience and a willingness to learn.", 'picture_uri'=>'/images/web-team-pics/henry-legay.jpg', +// 'email'=>'', 'linkedin_url'=>'https://www.linkedin.com/in/henrylegay', 'github_url'=>'https://www.github.com/henlegay', +// 'twitter_url'=>'' ]; $members[] = [ 'name'=>'Mason Besmer', 'title'=>'Team Member', 'description'=>"Mason Besmer is a Computer Science student at UNT. He is a webmaster for UNT Robotics and participates in many student orgs. He creates many things and comes up with ideas for even more. In his free time, he likes to create environments for games and program the website in front of you. He likes organization and loves to tinker with things. Creator of his own magic mirror, Mason is a advocate for building his own electronics. Currently, he is working on a software solution for his Starcube. You can find out more about it on his LinkedIn.", 'picture_uri'=>'/images/web-team-pics/mason-besmer.jpg', +// 'email'=>'', 'linkedin_url'=>'https://www.linkedin.com/in/masonbesmer', 'github_url'=>'https://www.github.com/shotbyapony', +// 'twitter_url'=>'' ]; $members[] = [ 'name'=>'Aryan Damle', 'title'=>'Team Member', 'description'=>"Aryan Damle is a Computer Science student at UNT. He is an aspiring full stack web developer and an avid Home Assistant enthusiast. He mentors a high school robotics team and loves to work on robots in his free time. You can find him at your local car meet on weekends if he isn't busy working on a robot or fixing something in his garage.", 'picture_uri'=>'/images/web-team-pics/aryan-damle.jpg', +// 'email'=>'', 'linkedin_url'=>'https://www.linkedin.com/in/aryan-damle-8691b11bb', 'github_url'=>'https://www.github.com/aryan-damle', +// 'twitter_url'=>'' ]; $members[] = [ 'name'=>'Mary Plana', 'title'=>'Team Member', 'description'=>"Mary Plana is a Computer Science Student at UNT with studies focused on Front End Development. She loves designing and implementing the user interface of a project. She has a natural curiosity about the world and loves to learn and improve her skills. She is currently the president of Application Development Organization. She facilitates the meeting and leads student UI designers to design, implement, and improve the user interface of projects.", 'picture_uri'=>'/images/web-team-pics/mary-plana.jpg', +// 'email'=>'', 'linkedin_url'=>'https://www.linkedin.com/in/mary-plana', 'github_url'=>'https://www.github.com/mcp31', +// 'twitter_url'=>'' ]; $members[] = [ 'name'=>'David Thompson', 'title'=>'Team Member', 'description'=>"David Thompson is a Computer Science Student at UNT with studies focused on Full Stack Development. He loves solving problems, learning new things, and is currently working with a start up on a social media application that is currently in Apple's TestFlight.", 'picture_uri'=>'/images/web-team-pics/david-thompson.jpg', +// 'email'=>'', 'linkedin_url'=>'https://www.linkedin.com/in/david-thompson-000', 'github_url'=>'https://www.github.com/davidkt99', +// 'twitter_url'=>'' ]; $members[] = [ @@ -74,8 +89,10 @@ 'title'=>'Team Member', 'description'=>"Samin Yasar is a senior Computer Science student at UNT. He is a team member of UNT Robotics webmaster helping maintain UNT Robotics website. He is also a part of the Application Development Organization as a team member. He likes to learn new things and solve complex problems.", 'picture_uri'=>'/images/web-team-pics/samin-yasar.jpg', +// 'email'=>'', 'linkedin_url'=>'https://www.linkedin.com/in/samin2668', 'github_url'=>'https://www.github.com/samin2668', +// 'twitter_url'=>'' ]; $members[] = [ @@ -83,8 +100,27 @@ 'title'=>'Team Member', 'description'=>"Kenneth Chen is a Computer Science and Accounting student at UNT. As part of UNT Robotics, he's programmed helpful things, such as the controller connections for Botathon Season 3. He is also the financial director of UNT Robotics. He enjoys learnings and helping others and hopes to make the website more accessible.", 'picture_uri'=>'/images/bio-pics/kenneth-chen.jpg', +// 'email'=>'', 'linkedin_url'=>'https://www.linkedin.com/in/kenneth-w-chen', 'github_url'=>'https://www.github.com/kenneth-w-chen', +// 'twitter_url'=>'' +]; +$members[] = [ + 'name'=>'Truitt Crozier', + 'title'=>'Team Member', + 'description'=>"Truitt Crozier is a sophomore Computer Science student at UNT. His passions are learning about video game console architecture, collecting music, and playing Tetris. As a part of UNT Robotics, he is involved with programming and electronics.", + 'picture_uri'=>'/images/bio-pics/truitt-crozier.jpg', + 'linkedin_url'=>'https://www.linkedin.com/in/truitt-crozier-719355293', + 'github_url'=>'https://github.com/tjcrozier', +]; + +$members[] = [ + 'name'=>'Willow Houchin', + 'title'=>'Team Member', + 'description'=>"Willow Houchin is a Computer Science student at UNT. As a member of UNT Robotics, she has worked on the rover, creating test scripts and debugging motor connections. She enjoys all kinds of both computer science and engineering and loves learning new things", + 'picture_uri'=>'/images/bio-pics/willow-houchin.jpg', + 'linkedin_url'=>'https://www.linkedin.com/in/willow-houchin-127147252', + 'github_url'=>'https://www.github.com/WillowHouchin', ]; ?>
    diff --git a/images/bio-pics/willow-houchin.jpg b/images/bio-pics/willow-houchin.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5fbf7e3934f6600814412c7a09234fdf12188c78 GIT binary patch literal 24460 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 ukaN Date: Sat, 16 Nov 2024 16:31:14 -0600 Subject: [PATCH 30/33] fixed truitt mitosis --- about/our-web-team.php | 8 -------- 1 file changed, 8 deletions(-) diff --git a/about/our-web-team.php b/about/our-web-team.php index 4a7b28f0..060f66cb 100644 --- a/about/our-web-team.php +++ b/about/our-web-team.php @@ -105,14 +105,6 @@ 'github_url'=>'https://www.github.com/kenneth-w-chen', // 'twitter_url'=>'' ]; -$members[] = [ - 'name'=>'Truitt Crozier', - 'title'=>'Team Member', - 'description'=>"Truitt Crozier is a sophomore Computer Science student at UNT. His passions are learning about video game console architecture, collecting music, and playing Tetris. As a part of UNT Robotics, he is involved with programming and electronics.", - 'picture_uri'=>'/images/bio-pics/truitt-crozier.jpg', - 'linkedin_url'=>'https://www.linkedin.com/in/truitt-crozier-719355293', - 'github_url'=>'https://github.com/tjcrozier', -]; $members[] = [ 'name'=>'Willow Houchin', From 52a2829872076cf0b9d37f49f4ebf2a7197ff416 Mon Sep 17 00:00:00 2001 From: Sebastian King Date: Sat, 16 Nov 2024 16:37:50 -0600 Subject: [PATCH 31/33] URW-0: fix import path --- about/our-web-team.php | 40 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/about/our-web-team.php b/about/our-web-team.php index 38226a7e..118d822e 100644 --- a/about/our-web-team.php +++ b/about/our-web-team.php @@ -1,72 +1,87 @@ 'Peyton Thibodeaux 2', + 'name'=>'Peyton Thibodeaux', 'title'=>'Webmaster | Team Member', 'description'=>"Peyton is a junior, studying computer science with a minor in mathematics. He's the webmaster for UNT Robotics and in charge of the website that you see in front of you. He enjoys learning and using new technologies and have a passion for creating things.", 'picture_uri'=>'/images/web-team-pics/peyton-thibodeaux.jpg', 'email'=>'webmaster@untrobotics.com', 'linkedin_url'=>'https://www.linkedin.com/in/peyton-thibodeaux', 'github_url'=>'https://www.github.com/peyton232', +// 'twitter_url'=>'' ]; $members[] = [ 'name'=>'Sebastian King', 'title'=>'Alumni | Team Member', 'description'=>"Sebastian is a post-baccalaureate world languages student, with a degree in Computer Science. His role is to oversee the day-to-day running of the organisation and help ensure the organisation best serves the students at UNT. His expertise are programming and electrical engineering and he specialises in networking and remote control systems. He is also responsible for a lot of the more ambitious projects around campus, including the famous Sofabot and our re-usable weather balloon project.", 'picture_uri'=>'/images/web-team-pics/sebastian-king.jpg', +// 'email'=>'', 'linkedin_url'=>'https://www.linkedin.com/in/sebastian-king', 'github_url'=>'https://www.github.com/sebastian-king', +// 'twitter_url'=>'' ]; $members[] = [ 'name'=>'Nicholas Tindle', 'title'=>'President | Team Member', 'description'=>"Nicholas Tindle is a Computer Engineering student at UNT. He works in software engineering and loves hackathons. You can generally find him wearing a hat and probably a sweatshirt. He has a long history of collaboration with UNT Robotics as the first president, a loyal advisor, and now Project Manager. He has also served as an advisor to the Dean and is currently an officer of Engineering United. Nick has helped host numerous events at the university over the years. In his professional life, he works in data analysis, web development, and python scripting.", 'picture_uri'=>'/images/web-team-pics/nick-tindle.jpg', +// 'email'=>'', 'linkedin_url'=>'https://www.linkedin.com/in/ntindle', 'github_url'=>'https://www.github.com/ntindle', +// 'twitter_url'=>'' ]; $members[] = [ 'name'=>'Henry Legay', 'title'=>'Team Member', 'description'=>"Henry Legay is a Computer Science Student at UNT focused on web development. He is a web developer in Robotics with ready applicable experience and a willingness to learn.", 'picture_uri'=>'/images/web-team-pics/henry-legay.jpg', +// 'email'=>'', 'linkedin_url'=>'https://www.linkedin.com/in/henrylegay', 'github_url'=>'https://www.github.com/henlegay', +// 'twitter_url'=>'' ]; $members[] = [ 'name'=>'Mason Besmer', 'title'=>'Team Member', 'description'=>"Mason Besmer is a Computer Science student at UNT. He is a webmaster for UNT Robotics and participates in many student orgs. He creates many things and comes up with ideas for even more. In his free time, he likes to create environments for games and program the website in front of you. He likes organization and loves to tinker with things. Creator of his own magic mirror, Mason is a advocate for building his own electronics. Currently, he is working on a software solution for his Starcube. You can find out more about it on his LinkedIn.", 'picture_uri'=>'/images/web-team-pics/mason-besmer.jpg', +// 'email'=>'', 'linkedin_url'=>'https://www.linkedin.com/in/masonbesmer', 'github_url'=>'https://www.github.com/shotbyapony', +// 'twitter_url'=>'' ]; $members[] = [ 'name'=>'Aryan Damle', 'title'=>'Team Member', 'description'=>"Aryan Damle is a Computer Science student at UNT. He is an aspiring full stack web developer and an avid Home Assistant enthusiast. He mentors a high school robotics team and loves to work on robots in his free time. You can find him at your local car meet on weekends if he isn't busy working on a robot or fixing something in his garage.", 'picture_uri'=>'/images/web-team-pics/aryan-damle.jpg', +// 'email'=>'', 'linkedin_url'=>'https://www.linkedin.com/in/aryan-damle-8691b11bb', 'github_url'=>'https://www.github.com/aryan-damle', +// 'twitter_url'=>'' ]; $members[] = [ 'name'=>'Mary Plana', 'title'=>'Team Member', 'description'=>"Mary Plana is a Computer Science Student at UNT with studies focused on Front End Development. She loves designing and implementing the user interface of a project. She has a natural curiosity about the world and loves to learn and improve her skills. She is currently the president of Application Development Organization. She facilitates the meeting and leads student UI designers to design, implement, and improve the user interface of projects.", 'picture_uri'=>'/images/web-team-pics/mary-plana.jpg', +// 'email'=>'', 'linkedin_url'=>'https://www.linkedin.com/in/mary-plana', 'github_url'=>'https://www.github.com/mcp31', +// 'twitter_url'=>'' ]; $members[] = [ 'name'=>'David Thompson', 'title'=>'Team Member', 'description'=>"David Thompson is a Computer Science Student at UNT with studies focused on Full Stack Development. He loves solving problems, learning new things, and is currently working with a start up on a social media application that is currently in Apple's TestFlight.", 'picture_uri'=>'/images/web-team-pics/david-thompson.jpg', +// 'email'=>'', 'linkedin_url'=>'https://www.linkedin.com/in/david-thompson-000', 'github_url'=>'https://www.github.com/davidkt99', +// 'twitter_url'=>'' ]; $members[] = [ @@ -74,8 +89,10 @@ 'title'=>'Team Member', 'description'=>"Samin Yasar is a senior Computer Science student at UNT. He is a team member of UNT Robotics webmaster helping maintain UNT Robotics website. He is also a part of the Application Development Organization as a team member. He likes to learn new things and solve complex problems.", 'picture_uri'=>'/images/web-team-pics/samin-yasar.jpg', +// 'email'=>'', 'linkedin_url'=>'https://www.linkedin.com/in/samin2668', 'github_url'=>'https://www.github.com/samin2668', +// 'twitter_url'=>'' ]; $members[] = [ @@ -83,8 +100,27 @@ 'title'=>'Team Member', 'description'=>"Kenneth Chen is a Computer Science and Accounting student at UNT. As part of UNT Robotics, he's programmed helpful things, such as the controller connections for Botathon Season 3. He is also the financial director of UNT Robotics. He enjoys learnings and helping others and hopes to make the website more accessible.", 'picture_uri'=>'/images/bio-pics/kenneth-chen.jpg', +// 'email'=>'', 'linkedin_url'=>'https://www.linkedin.com/in/kenneth-w-chen', 'github_url'=>'https://www.github.com/kenneth-w-chen', +// 'twitter_url'=>'' +]; +$members[] = [ + 'name'=>'Truitt Crozier', + 'title'=>'Team Member', + 'description'=>"Truitt Crozier is a sophomore Computer Science student at UNT. His passions are learning about video game console architecture, collecting music, and playing Tetris. As a part of UNT Robotics, he is involved with programming and electronics.", + 'picture_uri'=>'/images/bio-pics/truitt-crozier.jpg', + 'linkedin_url'=>'https://www.linkedin.com/in/truitt-crozier-719355293', + 'github_url'=>'https://github.com/tjcrozier', +]; + +$members[] = [ + 'name'=>'Willow Houchin', + 'title'=>'Team Member', + 'description'=>"Willow Houchin is a Computer Science student at UNT. As a member of UNT Robotics, she has worked on the rover, creating test scripts and debugging motor connections. She enjoys all kinds of both computer science and engineering and loves learning new things", + 'picture_uri'=>'/images/bio-pics/willow-houchin.jpg', + 'linkedin_url'=>'https://www.linkedin.com/in/willow-houchin-127147252', + 'github_url'=>'https://www.github.com/WillowHouchin', ]; ?>
    From 94d2e2662c19b1caf1692d72f6a95f6f2b7fd840 Mon Sep 17 00:00:00 2001 From: loganthebrewer Date: Sat, 16 Nov 2024 16:55:41 -0600 Subject: [PATCH 32/33] Added Logan to About --- about/our-web-team.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/about/our-web-team.php b/about/our-web-team.php index d649a3e6..527e01f8 100644 --- a/about/our-web-team.php +++ b/about/our-web-team.php @@ -86,6 +86,16 @@ 'linkedin_url'=>'https://www.linkedin.com/in/kenneth-w-chen', 'github_url'=>'https://www.github.com/kenneth-w-chen', ]; + +$members[] = [ + 'name'=>'Logan Brewer', + 'title'=>'Team Member', + 'description'=>"Logan Brewer is a Computer Science student at UNT. He is an aspiring software developer with a passion for building things. He enjoys working on electronics projects and tinkering and always approaches problems with eagerness to learn.", + 'picture_uri'=>'/images/bio-pics/logan-brewer.jpg', + 'linkedin_url'=>'https://www.linkedin.com/in/logan-brewer-26a872256/', + 'github_url'=>'https://github.com/loganthebrewer', +]; + ?>
    From 5e8785e0aefc5d47939548e4e534fc4e8af270dd Mon Sep 17 00:00:00 2001 From: loganthebrewer Date: Sat, 16 Nov 2024 17:10:19 -0600 Subject: [PATCH 33/33] Added Logan image --- images/bio-pics/logan-brewer.jpg | Bin 0 -> 25225 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/bio-pics/logan-brewer.jpg diff --git a/images/bio-pics/logan-brewer.jpg b/images/bio-pics/logan-brewer.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7c36c40c4331e18a6dbaf478f29406f57f99f00b GIT binary patch literal 25225 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 literal 0 HcmV?d00001