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
- - What is Botathon
+ - What is Botathon
+
- Register
- Schedule
@@ -171,23 +175,29 @@ class="rd-parallax-layer section-top-75 section-md-top-150 section-lg-top-260">
-
Botathon - Season (2024)
+
Botathon - Season (2024)
What is Botathon?
-
Botathon is an annual event hosted by UNT Robotics where all UNT students are invited to compete in a one-day design,
- test, build, and compete marathon!
+
Botathon is an annual event hosted by UNT Robotics where all UNT students are invited to
+ compete in a one-day design,
+ test, build, and compete marathon!
+
Stay tuned for this year's theme!
- We provide everything you will need on the day, including parts, kits, tools, guides, mentorship,
- and fantastic food (lunch, dinner, and snacks) for a packed day of robot building and competing. The event is open to all students,
+ We provide everything you will need on the day, including parts, kits, tools, guides,
+ mentorship,
+ and fantastic food (lunch, dinner, and snacks) for a packed day of robot building and
+ competing. The event is open to all students,
regardless of skill level. Whether you're an entry-level student looking to get involved
- with and learn about robotics or an advanced robot technician, there's plenty of fun for everyone!
+ with and learn about robotics or an advanced robot technician, there's plenty of fun for
+ everyone!
-
Botathon is all about teamwork and friendly competition. Our mission is to build knowledge and skills while promoting
+
Botathon is all about teamwork and friendly competition. Our mission is to build knowledge
+ and skills while promoting
creativity and camaraderie among all participants.
@@ -202,7 +212,8 @@ class="rd-parallax-layer section-top-75 section-md-top-150 section-lg-top-260">
Registration
-
Registration for Season is open now for all currently enrolled UNT students.
+
Registration for Season is open now for all currently
+ enrolled UNT students.
Mar. 8: Registration Opened
@@ -263,13 +274,34 @@ class="rd-parallax-layer section-top-75 section-md-top-150 section-lg-top-260">
Event Date: April 16, 2022
- 9:00 am | Check In Opens |
- 10:00 am | Team Finding Event |
- 10:30 am | Build Time! |
- 1:00 pm | Lunch |
- 5:00 pm | Competition Begins |
- 6:30 pm | Dinner |
- 9:00 pm | Closing Ceremony & Winners Announced |
+
+ 9:00 am |
+ Check In Opens |
+
+
+ 10:00 am |
+ Team Finding Event |
+
+
+ 10:30 am |
+ Build Time! |
+
+
+ 1:00 pm |
+ Lunch |
+
+
+ 5:00 pm |
+ Competition Begins |
+
+
+ 6:30 pm |
+ Dinner |
+
+
+ 9:00 pm |
+ Closing Ceremony & Winners Announced |
+
@@ -294,7 +326,8 @@ class="rd-parallax-layer section-top-75 section-md-top-150 section-lg-top-260">
MECANUM WHEEL CAR ROBOT
-

+
@@ -337,7 +370,8 @@ class="rd-parallax-layer section-top-75 section-md-top-150 section-lg-top-260">
RUBBER WHEEL CAR ROBOT
-

+
@@ -383,7 +417,8 @@ class="rd-parallax-layer section-top-75 section-md-top-150 section-lg-top-260">
TANK TRACK ROBOT
-

+
@@ -517,7 +552,8 @@ class="rd-parallax-layer section-top-75 section-md-top-150 section-lg-top-260">
botbucks of in-game currency to buy upgrade parts for their robot. Participants are
encouraged to form their crew prior to registration, but a team building event will
be held on the morning of the event to help find teammates.
- There will be mentors to assist teams during the build process in our Discord, as well as in person.
+ There will be mentors to assist teams during the build process in our Discord, as well as in person.
@@ -582,15 +618,15 @@ class="rd-parallax-layer section-top-75 section-md-top-150 section-lg-top-260">
footer(false);
?>
From 0a245a414ae31285d3a32bb9f5a90e8e22693086 Mon Sep 17 00:00:00 2001
From: kenneth-w-chen <74205780+Kenneth-W-Chen@users.noreply.github.com>
Date: Wed, 3 Jul 2024 11:48:04 -0500
Subject: [PATCH 17/33] Change queries to be more dynamic
---
botathon/index.php | 22 +++++++++++++---------
1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/botathon/index.php b/botathon/index.php
index f622bbcf..98631e4c 100644
--- a/botathon/index.php
+++ b/botathon/index.php
@@ -155,9 +155,9 @@ class="rd-parallax-layer section-top-75 section-md-top-150 section-lg-top-260">
- What is Botathon
- Register
-
+
- Schedule
-
+
- Parts List
- Teams
@@ -618,9 +618,13 @@ class="img-responsive"/>
footer(false);
?>
From 6909ab53aacf2233f61190a8feabbfa975db2240 Mon Sep 17 00:00:00 2001
From: kenneth-w-chen <74205780+Kenneth-W-Chen@users.noreply.github.com>
Date: Fri, 9 Aug 2024 10:16:54 -0500
Subject: [PATCH 18/33] Change variable names
---
botathon/index.php | 52 +++++++++++++++++++++++-----------------------
1 file changed, 26 insertions(+), 26 deletions(-)
diff --git a/botathon/index.php b/botathon/index.php
index 98631e4c..179e498c 100644
--- a/botathon/index.php
+++ b/botathon/index.php
@@ -619,15 +619,15 @@ class="img-responsive"/>
?>
From 04f600e7d02d9fa07267344bb589ca1fb214ca43 Mon Sep 17 00:00:00 2001
From: kenneth-w-chen <74205780+Kenneth-W-Chen@users.noreply.github.com>
Date: Sun, 22 Sep 2024 10:46:33 -0500
Subject: [PATCH 19/33] Fix product page breadcrumbs
---
merch/product.php | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/merch/product.php b/merch/product.php
index 17bb7af2..107a669e 100644
--- a/merch/product.php
+++ b/merch/product.php
@@ -63,6 +63,11 @@
$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';
+ }
+
} else {
head("Invalid Product", true);
}
@@ -160,7 +165,7 @@ function get_variant_variant($variant_name) {
- Home
- Merch
-
- get_type_name(); ?>s
+
- Product
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'=>''
+];
?>
-
@@ -33,101 +98,11 @@
These people are the ones responsible for building our organisation and getting us to where we are today.
-
-
-
-

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

-
-
-
-
-
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.
-
-
-
-
-
-
-
-
-

-
-
-
-
-
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.
-
-
-
-
-
-
-
-

-
-
-
-
-
Mechanical Engineer | Event Coordinator at UNT Robotics
-
-
-
-
-
-
-
-

-
-
-
-
-
Mechanical Engineer | Public Relations at UNT Robotics
-
-
-
-
-
-
-
-

-
-
-
-
-
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'=>''
+];
?>
-
@@ -34,252 +169,11 @@
These people are the reason for our success and expertise.
-
-
-
-

-
-
-
-
-
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.
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
-
-
-
-
-
-
-
-
-

-
-
-
-
Lauren Caves
Co-President
-
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.
-
-
-
-
-
-
-
-
-

-
-
-
-
Tyler Adam Martinez
Vice President and Financial Director
-
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.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

-
-
-
-
Andrew PaulDeputy Financial Director
-
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.
-
-
-
-
-
-
-
-
-

-
-
-
-
-
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.
-
-
-
-
-
-
-
-
-

-
-
-
-
-
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.
-
-
-
-
-
-
-
-
-

-
-
-
-
-
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!
-
-
-
-
-
-
-
-
-

-
-
-
-
-
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.
-
-
-
-
-
-
-
-
-

-
-
-
-
-
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.
-
-
-
-
-
-
-
-
-

-
-
-
-
-
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.
-
-
-
-
-
-
-
-
-

-
-
-
-
Joe MooreAerospace Division Lead
-
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.
-
-
-
-
-
+
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'=>''
+];
?>
-
@@ -36,274 +130,11 @@
These are the people who keep this site running.
-
-
-
-
-

-
-
-
-
-
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.
-
-
-
-
-
-
-
-
-
-

-
-
-
-
-
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.
-
-
-
-
-
-
-
-
-
-

-
-
-
-
-
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.
-
-
-
-
-
-
-
-
-
-

-
-
-
-
-
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.
-
-
-
-
-
-
-
-
-
-

-
-
-
-
-
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.
-
-
-
-
-
-
-
-
-
-

-
-
-
-
-
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.
-
-
-
-
-
-
-
-
-
-

-
-
-
-
-
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.
-
-
-
-
-
-
-
-
-
-
-

-
-
-
-
-
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.
-
-
-
-
-
-
-
-
-
-
-

-
-
-
-
-
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.
-
-
-
-
-
-
-
-
-
-
-

-
-
-
-
-
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.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
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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