Compare commits

...

187 Commits

Author SHA1 Message Date
004d7798e2 Update 'README.md' 2023-08-24 15:11:17 +01:00
3f66b8bf86 Dockerize 2023-03-19 20:22:58 +00:00
59791b49ec Updates 2023-03-19 20:08:58 +00:00
4491d5e0a3 Update owlboard links 2023-03-06 21:16:11 +00:00
364cec91fc Update depreciation notices 2023-03-05 23:43:53 +00:00
96feb27b76 Depreciate
Depreciation message.
2023-01-30 16:19:27 +00:00
e3f74fd45e Change path to server key strings 2022-11-26 15:28:55 +00:00
b4f979e596 testing (#42)
Reviewed-on: #42
2022-11-23 22:12:50 +00:00
39b54af4b5 Update version string ready for merget to master 2022-11-23 22:10:18 +00:00
de940d95fe v0.4.4-devel (#41)
Reviewed-on: #41
2022-11-23 21:55:58 +00:00
268facd3e7 Add testing scripts 2022-11-05 22:16:09 +00:00
fd78ef1284 Prepare testing page 2022-11-05 22:07:12 +00:00
d1b5046a42 Add examples for styling and testing 2022-11-05 21:50:22 +00:00
d99e13849e Add NRE Logos in preparation for LDB API Additions 2022-11-05 21:42:10 +00:00
f2432e310e Closes issue #39 2022-11-05 20:48:13 +00:00
6a64ede3f6 Tidy CSS 2022-10-30 21:21:09 +00:00
b5a652344c Closes issue #40 2022-10-30 21:18:21 +00:00
e409ff190a Update CSS Colors to vars 2022-10-30 20:51:06 +00:00
8225f8eae2 Correct links on borrowed menu 2022-10-30 20:39:08 +00:00
b368e65bd9 Testing new menu 2022-10-30 20:36:17 +00:00
f4dc85e434 Bump version string 2022-10-30 20:13:06 +00:00
62fd32b7c2 Styling Fixes 2022-10-17 15:26:35 +01:00
063f939abe Fix silly error 2022-10-17 15:19:40 +01:00
5862764f58 Fix silly error 2022-10-17 15:17:45 +01:00
78557474cb Cat fixes 2022-10-17 14:39:24 +01:00
6c6a404538 Further cat fixes 2022-10-17 14:36:32 +01:00
5c9c385d86 Cat fixes 2022-10-17 14:32:56 +01:00
5622b99adf Still fixing what the cat did 2022-10-17 14:30:28 +01:00
d1904ba4bc Fixing what the cat did when he was on my keyboard 2022-10-17 14:26:16 +01:00
83e2e06073 Trial Fix 2022-10-17 14:23:36 +01:00
49492a42d0 0.4.3-devel (#36)
Reviewed-on: #36
2022-10-17 13:14:24 +00:00
78c6fa2620 0.4.3-devel (#36)
Reviewed-on: #36
2022-10-17 13:13:16 +00:00
4b1a8315e7 0.4.3-devel (#36)
Reviewed-on: #36
2022-10-17 13:13:15 +00:00
2103a2f651 0.4.3-devel (#36)
Reviewed-on: #36
2022-10-17 13:12:56 +00:00
ce9e30807e 0.4.3-devel (#36)
Reviewed-on: #36
2022-10-17 13:12:55 +00:00
b4df99c961 Remove maintenance notice 2022-10-17 12:21:23 +01:00
af4f4c465a Add maintenance notice 2022-10-06 21:27:52 +01:00
272b4786b7 0.4.2-devel (#34)
Fix issues #29, #30, #31.

Partial fix for #23 on mobile devices.  #23 still needs more work and possible a redesign of the menu.

Reviewed-on: #34
2022-10-05 20:09:37 +00:00
7d812b8488 Closes issue #28 (#33)
Reviewed-on: #33
2022-09-24 19:44:07 +00:00
e18a75bf65 Closes issue #28 2022-09-24 20:41:35 +01:00
6fd580e3f9 issue-fix (#32)
Closes issues #22 & #26.

Improves #23 but does not close it yet.

Co-authored-by: fred.boniface <fred@fjla.uk>
Reviewed-on: #32
2022-09-23 10:03:54 +00:00
e05ba27ac8 Update 'js/tiploc-finder.js' 2022-09-21 10:06:02 +00:00
0706d90500 Update version string from devel to alpha for push to main 2022-09-21 10:46:53 +01:00
9a1abaeb39 Error page fix 2022-09-21 10:42:49 +01:00
1b145dfe47 attmpt fix error page 2022-09-21 10:40:51 +01:00
a6fdc117e1 Attempt fix error page 2022-09-21 10:39:26 +01:00
25d93f52b7 Add placeholder text 2022-09-21 10:37:36 +01:00
b857db2390 Replace close-circle.png 2022-09-21 10:34:11 +01:00
731ef21e4f Change close icon 2022-09-21 10:29:34 +01:00
da0af4f6a2 Correct margin to menu items 2022-09-21 10:27:09 +01:00
8dc00391fb Add margin to menu items 2022-09-21 10:25:49 +01:00
a726bd1f3b Speed up redirect 2022-09-21 10:24:48 +01:00
b68b116381 Sped up redirect 2022-09-21 10:22:26 +01:00
a1175d0f23 Fixed erronous inline JS 2022-09-21 10:21:08 +01:00
13f567b5cd missing ; 2022-09-21 10:18:57 +01:00
daa09b3aa9 Forgot ; 2022-09-21 10:17:06 +01:00
9948a25832 Redirect to interstitial when form submitted to prevent erronous resubmission. 2022-09-21 10:16:12 +01:00
0085db0364 Link to issue tracker now defaults to open issues only. 2022-09-21 10:09:42 +01:00
e99daf9a68 Added transitions to dynamic objects 2022-09-21 10:07:55 +01:00
b3957224a0 Move .text-description blocks in to <div>'s 2022-09-21 10:04:41 +01:00
b2f88e0a92 Change p.text-description display to inline-block 2022-09-21 10:01:17 +01:00
3ca36cce07 Merge branch 'php-integration' of https://git.fjla.uk/fred.boniface/athena.fb-infra.uk into php-integration 2022-09-21 09:59:01 +01:00
3263543e68 Yet more style changes 2022-09-21 09:58:57 +01:00
90b19cf49c Updates styles again 2022-09-21 09:54:12 +01:00
753fbfbe76 Updated styling 2022-09-21 09:50:31 +01:00
eabfdce30e Changed styling 2022-09-21 09:48:22 +01:00
118dc7357c Added style media queries 2022-09-21 09:46:51 +01:00
e8678078b8 Update link styles 2022-09-21 09:44:21 +01:00
c7374c32f8 Further form style changes 2022-09-21 09:39:33 +01:00
9133ad7df0 Set textbox height 2022-09-21 09:37:10 +01:00
aa8e0c965f Convert error pages to PHP 2022-09-20 21:52:56 +01:00
c771e080fb Change home links to webroot rather than full URL 2022-09-20 21:46:42 +01:00
1f7c597c39 Final fix of report form for today 2022-09-20 21:43:45 +01:00
b3fc805763 Fixed inclusion of version number 2022-09-20 21:42:30 +01:00
35f87460f6 Fix missing " 2022-09-20 21:39:01 +01:00
cd7e005a69 Add Athena version to issue post. Remove unused files. Tidying 2022-09-20 21:38:25 +01:00
5f59766a8e Changed " to ' 2022-09-20 21:35:23 +01:00
d68268d6e1 ;" > "; 2022-09-20 21:34:15 +01:00
cbe7953fa5 Move title image to separate php file 2022-09-20 21:31:53 +01:00
c7a489e0ac Remove index.php from link to homepage take users to / 2022-09-20 21:29:47 +01:00
f6059c9390 Change text colour 2022-09-20 21:26:50 +01:00
ef743f7e84 more <br> 2022-09-20 21:24:40 +01:00
518ae7e0d8 Added <br>'s 2022-09-20 21:23:51 +01:00
8ff87b3416 Change margin to padding 2022-09-20 21:22:58 +01:00
41eebb6904 styling 2022-09-20 21:21:53 +01:00
b1d34ae2d9 Further styling 2022-09-20 21:21:01 +01:00
e12cff51d0 Yet more styling 2022-09-20 21:20:13 +01:00
fa418a44d9 Further form styling 2022-09-20 21:16:37 +01:00
14d65ebfde Changed form styling 2022-09-20 21:15:32 +01:00
f5a8bcdec3 Changed form styling. 2022-09-20 21:12:38 +01:00
19c59d2eb6 Removed help info from index. 2022-09-20 21:08:43 +01:00
f6e5fa0ee5 Changed positioning of close button 2022-09-20 21:07:28 +01:00
52e69cb89f Fixed styling 2022-09-20 21:05:48 +01:00
7aee153e82 Once again, missing ; 2022-09-20 21:02:32 +01:00
7e574334e5 Adjust menu for new pages 2022-09-20 21:01:44 +01:00
dfceb41e61 Remove redundant CSS 2022-09-20 21:01:36 +01:00
86146ef523 Update comments 2022-09-20 20:57:42 +01:00
6771a98f43 Create help.php page 2022-09-20 20:56:53 +01:00
ab00082232 Replaced quicklinks with 'action buttons' 2022-09-20 20:51:45 +01:00
952383d6aa Merge pull request 'Merge separate files into php-integration' (#12) from separate into php-integration
Reviewed-on: #12
2022-09-20 19:43:03 +00:00
695fada5b9 Fix var names 2022-09-20 20:40:29 +01:00
9543d1cf62 Removed unused variables 2022-09-20 20:38:20 +01:00
2ac8c3fa83 Moved submission code to separate file 2022-09-20 20:36:00 +01:00
64c69ef01c I use Python too much... more missing ;'s 2022-09-20 20:24:56 +01:00
460cc282dc Fixed missing ;'s 2022-09-20 20:24:05 +01:00
374333ed3a Fixed syntax error 2022-09-20 20:23:06 +01:00
746e77ddd9 Add nav menu to issue.php 2022-09-20 19:42:51 +01:00
2e56d59664 Move nav-menu to external php file 2022-09-20 19:41:47 +01:00
ec6551e985 index.html > index.php 2022-09-20 19:34:44 +01:00
c94ebb62b9 Formatting 2022-09-20 19:30:20 +01:00
175453f083 Formatting 2022-09-20 19:29:59 +01:00
d106168b9b Move <footer> tags from page to template 2022-09-20 19:29:19 +01:00
af0e2ec943 Remove headers and include headers.php 2022-09-20 19:28:22 +01:00
30b05df104 Create page-blocks/headers.php 2022-09-20 19:26:32 +01:00
95c1ea7b93 Rename report-issue.php for neature URLs 2022-09-20 19:24:09 +01:00
dc44deb343 Create submitToGitea(...) function 2022-09-20 19:22:01 +01:00
676dcfdc98 Corrected filename 2022-09-20 19:15:22 +01:00
f995db23ea Change inclusion of $giteaKey from read file to require PHP file. 2022-09-20 19:15:09 +01:00
cacec80387 Remove PHP end tag from version.php 2022-09-20 14:55:18 +01:00
18fbd49dc3 Fixed previous commit 2022-09-19 20:46:06 +01:00
f4c85bcd6c Change giteaKey to var in a server local php file 2022-09-19 20:44:39 +01:00
021a27e014 Further changes to CLI test 2022-09-19 20:40:39 +01:00
6a54ff1b9f Changed CLI test to test from server. 2022-09-19 20:37:58 +01:00
833e81e6f3 Remove echo $giteaKey to protect it. 2022-09-19 20:34:55 +01:00
5afdf094d5 Echo gitea key to check it is found. 2022-09-19 20:33:42 +01:00
a64a14420e Corrected path for include version.php 2022-09-19 20:30:15 +01:00
bd0502ef9f Fixed path for include footer. 2022-09-19 20:28:38 +01:00
542110baf0 moved report-issue/index.php to report-issue.php 2022-09-19 20:25:23 +01:00
f369cb65bf Updated report-issue/index.php based on the CLI tests 2022-09-19 20:00:41 +01:00
dd42127e16 Try without closed 2022-09-19 19:58:29 +01:00
018a387e54 without json_encode didnt work 2022-09-19 19:57:36 +01:00
3751b69a19 Trying without json_encode 2022-09-19 19:55:57 +01:00
a8bcfbba61 syntax fixes 2022-09-19 19:47:22 +01:00
c70c7637a3 Further changes of test scrupt 2022-09-19 19:46:34 +01:00
f2f0d33e61 Corrected php-cli test script 2022-09-19 19:40:08 +01:00
9d4808d64f Create a php-cli test script for gitea web call. 2022-09-19 19:33:48 +01:00
b93e4bf1be Simplified version.php 2022-09-19 19:28:11 +01:00
10c069e999 Fix includes 2022-09-18 20:46:47 +01:00
82f394aa0b Include footer test 2022-09-18 20:45:15 +01:00
41b0c63eb0 Added version file 2022-09-18 20:41:52 +01:00
49ac099e41 re-org 2022-09-18 20:39:32 +01:00
30ce754a24 Path changes 2022-09-18 20:38:27 +01:00
fcfd90f79b Presentation reorganising 2022-09-18 20:35:33 +01:00
9c259def43 File reorganisation 2022-09-18 20:34:31 +01:00
fe3d73f79b Sytax fixes 2022-09-18 20:32:11 +01:00
b8a6dda082 Include UA string and PHP version in issue report. 2022-09-18 20:29:48 +01:00
7c219235c0 Remove code lookup feature 2022-09-17 21:39:42 +01:00
93f3939428 Clarification of comments 2022-09-17 21:29:35 +01:00
bd4a60d5cb Initiate variable $issueData at start 2022-09-17 21:22:05 +01:00
f566d039ab Added json_encode 2022-09-17 21:19:57 +01:00
cfeb196289 Re-add phpinfo 2022-09-17 21:16:15 +01:00
c0e1b256bd Further testing 2022-09-17 21:15:02 +01:00
bc79f071a8 not working 2022-09-17 21:12:27 +01:00
a323fd7825 another try 2022-09-17 21:10:24 +01:00
daada35045 Shit syntax 2022-09-17 21:05:36 +01:00
cb66028b77 Fixed early use of variable 2022-09-17 21:04:19 +01:00
b5da264ce6 Corrected syntax 2022-09-17 20:58:16 +01:00
cd000594bc Test of issue submission 2022-09-17 20:57:03 +01:00
80a52123d8 Test filegetcontents 2022-09-17 20:32:55 +01:00
60a875958a Fixed viewport meta tags 2022-09-16 21:26:17 +01:00
807788b7f5 Values now remain after POST 2022-09-16 21:23:23 +01:00
4f6eb06b69 Further work on form 2022-09-16 21:18:36 +01:00
46841c465e Further updates to form 2022-09-16 21:14:24 +01:00
d8aa2889f5 Move form to one page (index.php) 2022-09-16 21:04:34 +01:00
3fa53ae69e Change comment box to text area 2022-09-16 20:58:40 +01:00
f7885f63b5 Changed method to POST 2022-09-16 20:56:03 +01:00
b76ab7932c Almost there 2022-09-16 20:53:19 +01:00
43f5e673fb Now i think 2022-09-16 20:50:37 +01:00
ac7c291af5 fix now? 2022-09-16 20:47:30 +01:00
5b789684b6 Updated data collection wording 2022-09-16 20:44:28 +01:00
ed626d2f64 Added submit version and data collection information 2022-09-16 20:43:26 +01:00
ca7726c426 Fix? 2022-09-16 20:40:40 +01:00
f4ff816ef2 Change form 2022-09-16 20:36:34 +01:00
10ade25ee9 First instance of report-issue form 2022-09-16 20:31:29 +01:00
bf3d39121c Updated error pages 2022-09-16 20:21:21 +01:00
73b73e158c Add 403 error page 2022-09-16 20:12:37 +01:00
542a51c4a4 Switch to absolute references throughout 2022-09-16 20:02:46 +01:00
3f89231959 Create 404 error page 2022-09-16 19:59:29 +01:00
f04f9f1733 Remove test.html 2022-09-16 19:55:34 +01:00
71f09a8444 Create test HTML 2022-09-16 19:41:59 +01:00
18e586f92d Change local perms 2022-09-16 19:38:41 +01:00
6fbace0a11 Bump version numbers to 0.4.0-devel 2022-09-16 19:29:33 +01:00
d0c40afdfe Update testpage 2022-09-16 19:20:24 +01:00
74fa1dfed8 Create php test page 2022-09-16 19:17:25 +01:00
f7bae7c31f Bump minor version 2022-09-15 22:48:03 +01:00
ca94cbcbc7 Added test page 2022-09-15 22:46:12 +01:00
92c20c8740 Added OpenLDBSVWS to Repo 2022-09-15 22:31:56 +01:00
51 changed files with 1585 additions and 241 deletions

5
.dockerignore Normal file
View File

@ -0,0 +1,5 @@
nginx.Dockerfile
php.Dockerfile
.dockerignore
.gitignore
LICENSE

View File

@ -1,3 +1,5 @@
# athena.fb-infra.uk
The web-app at athena.fb-infra.uk
**Athena has been superceded by OwlBoard - [git](https://git.fjla.uk/OwlBoard) - [web](https://owlboard.info)**
**This repository is archived**

Binary file not shown.

Before

Width:  |  Height:  |  Size: 820 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 302 B

BIN
assets/nre/nre-powered.xcf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

13
basic-test.php Normal file
View File

@ -0,0 +1,13 @@
<html>
<head>
<title>TEST_ONLY</title>
</head>
<body>
<?php
require './php/submitIssue.php';
echo cleanInput($_SERVER['QUERY_STRING']);
?>
</body>
</html>

40
conf/deploy.sh Normal file
View File

@ -0,0 +1,40 @@
#!/bin/bash
ROOTIN="/data/in"
ROOTOUT="/data/out"
echo "Running UglifyJS on /data/in folder"
uglifyjs-folder "$ROOTIN" -x ".js" -eo "$ROOTOUT"
echo "Running UglifyCSS"
CSSIN="/data/in/styles/"
CSSOUT="/data/out/styles"
cd $CSSIN
echo "Changed directory"
for f in *
do
if [ -f "$f" ]; then
uglifycss "$f" --output "$f";
fi
done
echo "Moving 'styles' to 'out'"
cp -r $CSSIN $CSSOUT
echo "Running html-minifier-terser on /folder"
HTMLIN="/data/in/"
HTMLOUT="/data/out"
html-minifier-terser --collapse-whitespace --remove-comments --file-ext html --input-dir /data/in/ --output-dir /data/out/
echo "Moving JSON Manifest file from root to output"
cat /data/in/manifest.json | jq -c > /data/out/manifest.json
echo "Moving other files folder from in/ to out/"
cp -r /data/in/assets /data/out/assets
cp -r /data/in/error-pages /data/out/error-pages
cp -r /data/in/page-blocks /data/out/page-blocks
cp -r /data/in/*.php /data/out
echo "Running GZIP & Brotli on all HTML, JS, CSS, JSON, SVG, TTF, VCF, PUB files"
find /data/out -type f -name \*.html -or -name \*.vcf -or -name \*.pub -or -name \*.js -or -name \*.css -or -name \*.json -or -name \*.svg -or -name \*.ttf | while read file; do gzip -k -9 $file; brotli -k -q 11 $file; done

57
conf/nginx.conf Normal file
View File

@ -0,0 +1,57 @@
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 128;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
gzip_static on;
brotli_static on;
server {
listen 80;
server_name localhost;
access_log /var/log/nginx/access.log;
root /site;
location ~ /(.git|php|page-blocks) {
deny all;
}
location / {
index index.php;
try_files $uri $uri/ $uri/index.php &uri/index.html =404;
break;
expires 7d;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass localhost:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
error_page 403 /error-pages/403.php;
error_page 404 /error-pages/404.php;
error_page 500 501 502 503 504 /error-pages/50x.php;
}
}

23
error-pages/403.php Normal file
View File

@ -0,0 +1,23 @@
<!DOCTYPE html>
<html>
<head>
<?php
include '../page-blocks/headers.php';
?>
<title>Athena - Error 403</title>
</head>
<body>
<!-- Main Content Begins -->
<?php require "../page-blocks/title-image.php";?>
<h1>You're not allowed to see that!</h1>
<p><a class="actionbutton" href="/">Go back to the homepage</a></p>
<h3>403 - Forbidden</h3>
</body>
</html>

29
error-pages/404.php Normal file
View File

@ -0,0 +1,29 @@
<!DOCTYPE html>
<html>
<head>
<?php
include '../page-blocks/headers.php';
?>
<title>Athena - Error 404</title>
</head>
<body>
<!-- Main Content Begins -->
<?php include "../page-blocks/title-image.php";?>
<h1>Oh no! That page can't be found</h1>
<p>
If you got here from a homescreen icon on your device, you will
need to remove and re-add the button due to major upgrades to
the Athena application
</p>
<p><a class="actionbutton" href="/">Go back to the homepage</a></p>
<h3>404 - Not Found</h3>
</body>
</html>

23
error-pages/50x.php Normal file
View File

@ -0,0 +1,23 @@
<!DOCTYPE html>
<html>
<head>
<?php
include '../page-blocks/headers.php';
?>
<title>Athena - Server Error</title>
</head>
<body>
<!-- Main Content Begins -->
<?php require "../page-blocks/title-image.php";?>
<h1>Ah, sorry. There's a problem at our end</h1>
<p><a class="actionbutton" href="/">Try the homepage</a></p>
<h3>50x - Server Error</h3>
</body>
</html>

34
help.php Normal file
View File

@ -0,0 +1,34 @@
<!DOCTYPE html>
<html>
<head>
<?php include './page-blocks/headers.php';?>
<title>Athena - Report Issue</title>
</head>
<body>
<!-- Popup Menu -->
<?php require "./page-blocks/nav-menu.php";?>
<!-- Main Content Begins -->
<?php require "./page-blocks/title-image.php";?>
<h2>Help</h2>
<div class="text-description">
<p>Just type in a three character CRS code or a TIPLOC into the text
box and tap the Lookup button.</p>
<p>If you enter a TIPLOC, this will not be verified - if it is
incorrect or unavailable on Tiger, you will be redirected to a
blank board. CRS codes will be verified against a lookup file
before redirecting.</p>
<p>Some stations are not on Tiger and these stations are not supported
here either. Notably TfW and Chiltern stations that border the GWR
network. Most GWR Central served stations are now available to
lookup.</p>
<p>I am working on a new version that will provide data for every
station in the National Rail database.</p>
</div>
<!-- Footer -->
<?php include './page-blocks/footer.php';?>
</body>
</html>

View File

@ -1,107 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Athena</title>
<meta charset="UTF-8"/>
<meta name="description" content="Athena - Quick links to live train departures for traincrew."/>
<meta name="viewport" content="width=device-width, initial=scale=1.0">
<meta name="application-name" content="Athena">
<meta name="author" content="Frederick Boniface">
<link rel="stylesheet" type="text/css" href="./styles/style.css"/>
<link rel="icon" type="image/png" href="./assets/icons/favicon.ico"/>
<link rel="manifest" type="application/json" href="./manifest.json"/>
<script src="./scripts/tiploc-finder.js"></script>
<script src="./scripts/nav.js"></script>
</head>
<body>
<!-- Popup Menu -->
<div id="menu-button" class="menu-button">
<img onclick="openMenu()" src="./assets/icons/menu.png"></img>
</div>
<div id="menu" class="menu">
<button class="menuitem" onclick="openAboutPopup(),closeMenu()">Help</button>
<button class="menuitem" onclick="openTiplocPopup(),closeMenu()">Code Lookup</button>
<img onclick="closeMenu()" class="popup-close" src="./assets/icons/close-circle.png"></img>
</div>
<!-- Main Content Begins -->
<img class="titleimg" src="./assets/title/title.webp"></img>
<br>
<input class="lookup-box" type="text" id="crs-lookup" name="crs-lookup" placeholder="Enter CRS/TIPLOC"/>
<br>
<button class="lookup-button" onclick="getTextEntry()">Lookup Departure Board</button>
<br>
<br>
<h2>Quick Links</h2>
<button class="quicklink" onclick="gotoInfoBoard('bathspa')">BTH</button>
<button class="quicklink" onclick="gotoInfoBoard('brstltm')">BRI</button>
<button class="quicklink" onclick="gotoInfoBoard('brstpwy')">BPW</button>
<button class="quicklink" onclick="gotoInfoBoard('crdfcen')">CDF</button>
<button class="quicklink" onclick="gotoInfoBoard('gloster')">GCR</button>
<button class="quicklink" onclick="gotoInfoBoard('oldfldp')">OLF</button>
<button class="quicklink" onclick="gotoInfoBoard('soton')">SOU</button>
<button class="quicklink" onclick="gotoInfoBoard('wstbryw')">WSB</button>
<button class="quicklink" onclick="gotoInfoBoard('wsmare')">WSM</button>
<br>
<br>
<p>This is an Alpha release and is under testing.</p>
<p>Some features may not work and some stations may not be available.</p>
<!-- Popup Boxes (Usually Hidden with CSS) -->
<div id="popup-about" class="popup-info">
<img onclick="closeAboutPopup()" class="popup-close" src="./assets/icons/close-circle.png"></img>
<h2>Help</h2>
<p>Just type in a three character CRS code or a TIPLOC into the text
box and tap the Lookup button.</p>
<p>If you enter a TIPLOC, this will not be verified - if it is
incorrect or unavailable on Tiger, you will be redirected to a
blank board. CRS codes will be verified against a lookup file
before redirecting.</p>
<p>Use the TIPLOC Lookup option from the menu to look up a TIPLOC from
a given CRS code.</p>
<p>Some stations are not on Tiger and these stations are not supported
here either. Notably TfW and Chiltern stations that border the GWR
network. Most GWR Central served stations are now available to
lookup.</p>
<p>Until there is a more modern public API offering access to Darwin,
I have no interest in supporting any more than simply linking to
the relevent Tiger page.</p>
</div>
<div id="popup-tiploc" class="popup-info">
<img onclick="closeTiplocPopup()" class="popup-close" src="./assets/icons/close-circle.png"></img>
<h2>Code Lookup</h2>
<p hidden>Enter a CRS Code in the textbox and tap Go.</p>
<p hidden>All GWR managed stations can be looked up but others cannot be
gauranteed.</p>
<p>THIS FEATURE IS NOT YET IMPLEMENTED</p>
<input type="text" id="lookup-tiploc" name="lookup-tiploc" placeholder="Enter CRS"/>
<button onclick="tiplocFinder()">Go</button>
<br>
<p id="resultCRS">CRS: </p>
<p id="resultName">Name: </p>
<p id="resultTIPLOC">TIPLOC: </p>
<p id="resultSTANME">STANME: </p>
<p id="resultSTANOX">STANOX: </p>
</div>
<!-- Footer -->
<footer>
<p>Created by Fred Boniface - v0.2.1-alpha</p>
</footer>
</body>
</html>

57
index.php Normal file
View File

@ -0,0 +1,57 @@
<!DOCTYPE html>
<html>
<head>
<?php include './page-blocks/headers.php';?>
<title>Athena</title>
<script src="/js/tiploc-finder.js" async></script>
</head>
<body>
<!-- Popup Menu -->
<?php include "./page-blocks/nav-menu.php";?>
<!-- Main Content Begins -->
<?php include "./page-blocks/title-image.php";?>
<br>
<br>
<br>
<br>
<input class="lookup-box" type="text" id="crs-lookup" name="crs-lookup" placeholder="Enter CRS/TIPLOC"/>
<br>
<button class="lookup-button" onclick="getTextEntry()">Lookup Departure Board</button>
<br>
<br>
<h2 hidden>Server Maintenance</h2>
<p hidden>Athena may become unavailable for several hours on 07/03/2023
during a server migration. Every effort will be made to prevend downtime.
</p>
<h2>Quick Links</h2>
<button class="actionbutton" onclick="gotoInfoBoard('bathspa')">BTH</button>
<button class="actionbutton" onclick="gotoInfoBoard('brstltm')">BRI</button>
<button class="actionbutton" onclick="gotoInfoBoard('brstpwy')">BPW</button>
<button class="actionbutton" onclick="gotoInfoBoard('crdfcen')">CDF</button>
<button class="actionbutton" onclick="gotoInfoBoard('gloster')">GCR</button>
<button class="actionbutton" onclick="gotoInfoBoard('oldfldp')">OLF</button>
<button class="actionbutton" onclick="gotoInfoBoard('soton')">SOU</button>
<button class="actionbutton" onclick="gotoInfoBoard('wstbryw')">WSB</button>
<button class="actionbutton" onclick="gotoInfoBoard('wsmare')">WSM</button>
<br>
<br>
<div class="text-description">
<p>Athena has been replaced with <a href="https://owlboard.info">OwlBoard</a>.</p>
<p>Athena will remain available for use as OwlBoard does not yet offer staff versions of boards.</p>
</div>
<!-- Footer -->
<?php include "./page-blocks/footer.php";?>
</body>
</html>

67
issue.php Normal file
View File

@ -0,0 +1,67 @@
<!DOCTYPE html>
<html>
<head>
<?php
include './page-blocks/headers.php';
include_once './php/version.php';
?>
<title>Athena - Report Issue</title>
</head>
<body>
<?php
// Imports the functions needed to validate and submit data
require './php/submitIssue.php';
// Set initial values
$title = $detail = "";
$ua_str = $_SERVER["HTTP_USER_AGENT"];
// If the page has been POSTed to then run this:
if ($_SERVER["REQUEST_METHOD"] == "POST" ) {
$title = cleanInput($_POST["subject"]);
$detail = cleanInput($_POST["detail"]);
// Prepare $detail to POST
$body = "Athena Version: " . $athenaVersion . "\n\n" . "User Agent: " . $ua_str . "\n\n Server PHP Version: " . PHP_VERSION . "\n\nUser Comments:\n" . $detail;
// Call POST function
sendInput($title,$body);
// Redirect to submit-done.php
echo "<script>setTimeout(function(){window.location.href = '/submit-done.php';}, 10);</script>";
};
?>
<!-- Popup Menu -->
<?php require "./page-blocks/nav-menu.php";?>
<!-- Main Content Begins -->
<?php require "./page-blocks/title-image.php";?>
<h1>Athena is retiring</h1>
<p>It has been replaced with <a href="https://owlboard.info">OwlBoard</a>.</p>
<p>
Currently, OwlBoard does not offer staff versions of departure boards.
Because of this, Athena will not have any further issues fixed but will remain
available until OwlBoard offers this feature.
</p>
<br>
<br>
<span class="form-info">
Your user agent is:
</span>
<br>
<?php echo $ua_str; ?>
</div>
</form>
<!-- Footer -->
<?php include "./page-blocks/footer.php" ?>
</body>
</html>

11
js/nav.js Normal file
View File

@ -0,0 +1,11 @@
function sidebarOpen() {
document.getElementById("sidebar").style.width = "50%";
document.getElementById("sidebar_open_short").style.display = "none";
document.getElementById("sidebar_close_short").style.display = "block";
}
function sidebarClose() {
document.getElementById("sidebar").style.width = "0%"
document.getElementById("sidebar_open_short").style.display = "block";
document.getElementById("sidebar_close_short").style.display = "none";
}

View File

@ -1,7 +1,7 @@
const url = "https://tiger.worldline.global/";
const view = "/staff;scrollbar=true";
console.group("Athena - v0.2.1-alpha")
console.group("Athena - Departure Boards")
console.info("Initialising");
@ -88,38 +88,3 @@ function gotoInfoBoard(station) {
console.groupEnd();
return 0;
}
/*This function provides the Lookup TIPLOC from CRS function from the menu*/
function tiplocFinder() {
console.group("Athena: function: tiplocFinder()");
let crs_to_find = document.getElementById("lookup-tiploc").value;
console.info("You are trying to lookup the TIPLOC for:" + crs_to_find.toUpperCase());
console.info("Checking if CRS code exists in look up data");
let hasKey = dataGlobal.hasOwnProperty(crs_to_find);
if (hasKey) { //If key exists then log and continue
console.info(crs_to_find.toUpperCase() + " does exist in lookup file");
} else { //If key does not exist then stop further processing
console.warn(crs_to_find.toUpperCase() + "does not exist in lookup file");
console.error(crs_to_find.toUpperCase() + " is an incorrect code or not supported.");
alert(crs_to_find.toUpperCase() + " is not a valid or supported CRS, " +
"please see the help section for more information");
console.groupEnd();
return 0;
}
let crs_obj = dataGlobal[crs_to_find];
let name = crs_obj['name'].toUpperCase();
let crs = crs_to_find.toUpperCase();
let stanme = crs_obj['stanme'].toUpperCase();
let stanox = crs_obj['stanox'];
let tiploc = crs_obj['tiploc'];
console.info("Found Data for " + crs +": Name: " + name + ", STANME: " + stanme +
", STANOX: " + stanox + ", TIPLOC: " + tiploc);
console.warn("Attempt writing to DOM, feature incomplete");
document.getElementById("resultCRS").innerHTML = "CRS: " + crs_to_find.toUpperCase();
document.getElementById("resultTIPLOC").innerHTML = "TIPLOC: " + tiploc.toUpperCase();
document.getElementById("resultSTANME").innerHTML = "STANME: " + stanme.toUpperCase();
document.getElementById("resultName").innerHTML = "Name: " + name.toUpperCase();
document.getElementById("resultSTANOX").innerHTML = "STANOX: " + stanox;
console.info("Writing to DOM Complete")
console.groupEnd();
}

View File

@ -1,7 +1,7 @@
{
"name": "Athena",
"short_name": "Athena",
"start_url": "/index.html",
"start_url": "/",
"scope": "/",
"display": "standalone",
"background_color": "#7fa7e6",

12
nginx.Dockerfile Normal file
View File

@ -0,0 +1,12 @@
FROM fedora:latest as compressor
RUN dnf install brotli nodejs npm jq -y
RUN npm i uglifyjs-folder uglifycss html-minifier-terser -g
COPY . /data/in
RUN bash /data/in/conf/deploy.sh
FROM fholzer/nginx-brotli:latest
RUN rm /etc/nginx/nginx.conf
RUN apk update
RUN apk add --upgrade libxml2 libxslt
COPY ./conf/nginx.conf /etc/nginx/nginx.conf
COPY --from=compressor /data/out/ /site/

6
page-blocks/footer.php Normal file
View File

@ -0,0 +1,6 @@
<?php
include "./php/version.php";
?>
<footer>
<p>Created by <a href="https://fredboniface.co.uk" target="_blank" rel="noreferrer noopener">Fred Boniface</a> - v<?php echo $athenaVersion ?></p>
</footer>

10
page-blocks/headers.php Normal file
View File

@ -0,0 +1,10 @@
<meta charset="UTF-8"/>
<meta name="description" content="Athena - Live train departures for traincrew."/>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="application-name" content="Athena">
<meta name="author" content="Frederick Boniface">
<link rel="stylesheet" type="text/css" href="/styles/style.css"/>
<link rel="icon" type="image/png" href="/assets/icons/favicon.ico"/>
<link rel="manifest" type="application/json" href="/manifest.json"/>
<script src="/js/nav.js"></script>

9
page-blocks/nav-menu.php Normal file
View File

@ -0,0 +1,9 @@
<div id="menubar_hamburger" class="hide_micro">
<button class="sidebar_control" id="sidebar_open_short" onclick="sidebarOpen()">&#9776;</button>
<button class="sidebar_control" id="sidebar_close_short" onclick="sidebarClose()">&times;</button>
</div>
<div id="sidebar">
<a href="/">Home</a>
<a href="/help.php">Help</a>
<a href="/issue.php">Report Issue</a>
</div>

View File

@ -0,0 +1,9 @@
<picture>
<source media="(max-width:1000px)" srcset="/assets/title/title_355.jxl" type="image/jxl">
<source media="(max-width:1000px)" srcset="/assets/title/title_355.webp" type="image/webp">
<source media="(max-width:1000px)" srcset="/assets/title/title_355.png" type="image/png">
<source srcset="/assets/title/title_600.jxl" type="image/jxl">
<source srcset="/assets/title/title_600.webp" type="image/webp">
<source srcset="/assets/title/title_600.png" type="image/png">
<img class="titleimg" src="/assets/title/title_600.png" alt="Athena Owl Logo">
</picture>

3
php.Dockerfile Normal file
View File

@ -0,0 +1,3 @@
FROM php:8.2.1-fpm-alpine
COPY . /site

View File

@ -0,0 +1,9 @@
<?php
require './php/openLDBSVWS.php';
require '/srv/php-keys/athena/gitea.php';
date_default_timezone_set("Europe/London");
$OpenLDBSVWS = new OpenLDBSVWS($ldbKey);
$response = $OpenLDBSVWS->GetDepartureBoardByCRS(10,"BRI",date("H:i:s",time()),120,"","","","","True");
header("Content-Type: text/plain");
print_r($response);
?>

View File

@ -0,0 +1,56 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>TESTING</title>
</head>
<body>
<?php
require("OpenLDBWS.php");
$OpenLDBWS = new OpenLDBWS("YOUR_ACCESS_TOKEN");
$response = $OpenLDBWS->GetDepartureBoard(10,"GTW");
$template["header"] = "
<table>
<thead>
<tr>
<th>Time</th>
<th>Destination</th>
<th>Platform</th>
<th>Expected</th>
</tr>
</thead>
<tbody>
";
$template["row"] = "
<tr>
<td>{std}</td>
<td>{destination}</td>
<td>{platform}</td>
<td>{etd}</td>
</tr>
";
$template["footer"] = "
</tbody>
</table>
";
if (isset($response->GetStationBoardResult->trainServices->service))
{
print $template["header"];
foreach($response->GetStationBoardResult->trainServices->service as $service)
{
$row = $template["row"];
$destinations = array();
foreach($service->destination->location as $location)
{
$destinations[] = $location->locationName;
}
$row = str_replace("{std}",$service->std,$row);
$row = str_replace("{destination}",implode(" and ",$destinations),$row);
$row = str_replace("{platform}",(isset($service->platform)?$service->platform:"&nbsp;"),$row);
$row = str_replace("{etd}",$service->etd,$row);
print $row;
}
print $template["footer"];
}
?>
</body>
</html>

View File

@ -0,0 +1,65 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>TESTING</title>
</head>
<body>
<?php
require './php/openLDBSVWS.php';
require './php/submitIssue.php';
require '/srv/php-keys/athena/gitea.php';
echo cleanInput($_SERVER['QUERY_STRING']);
date_default_timezone_set("Europe/London");
$OpenLDBSVWS = new OpenLDBSVWS($ldbKey);
$response = $OpenLDBSVWS->GetDepartureBoardByCRS(10,"BRI",date("H:i:s",time()),120,"","","","","True");
$template["header"] = "
<table>
<thead>
<tr>
<th>ID</th>
<th>Org.</th>
<th>Dest.</th>
<th>Plat.</th>
<th>Sch</th>
<th>Exp</th>
</tr>
</thead>
<tbody>
";
$template["row"] = "
<tr>
<td>{id}</td>
<td>{org}</td>
<td>{dest}</td>
<td>{plat}</td>
<td>{sch}</td>
<td>{act}</td>
</tr>
";
$template["footer"] = "
</tbody>
</table>
";
if (isset($response->GetBoardResult->trainServices->service))
{
print $template["header"];
foreach($response->GetBoardResult->trainServices->service as $service)
{
$row = $template["row"];
$destinations = array();
$row = str_replace("{id}",$service->trainid,$row);
$row = str_replace("{org}",$service->origin->location->tiploc,$row);
$row = str_replace("{dest}",$service->destination->location->tiploc,$row);
$row = str_replace("{plat}",$service->platform,$row);
$row = str_replace("{sch}",$servoce->std,$row);
$row = str_replace("{act}",$service->etd,$row);
print $row;
}
print $template["footer"];
}
?>
</body>
</html>

View File

@ -0,0 +1,500 @@
stdClass Object
(
[GetBoardResult] => stdClass Object
(
[generatedAt] => 2022-11-05T21:47:01.9993579+00:00
[locationName] => London Paddington
[crs] => PAD
[stationManager] => Network Rail
[stationManagerCode] => RT
[isTruncated] => 1
[trainServices] => stdClass Object
(
[service] => Array
(
[0] => stdClass Object
(
[rid] => 202211057051479
[uid] => F51479
[trainid] => 9U02
[rsid] => XR134200
[sdd] => 2022-11-05
[operator] => Elizabeth Line
[operatorCode] => XR
[std] => 2022-11-05T21:48:00
[etd] => 2022-11-05T21:48:00
[departureType] => Forecast
[departureSource] => Darwin
[platform] => A
[origin] => stdClass Object
(
[location] => Array
(
[0] => stdClass Object
(
[locationName] => London Paddington
[crs] => PAD
[tiploc] => PADTLL
)
)
)
[destination] => stdClass Object
(
[location] => Array
(
[0] => stdClass Object
(
[locationName] => Abbey Wood
[crs] => ABW
[tiploc] => ABWDXR
)
)
)
[category] => OO
[activities] => TB
)
[1] => stdClass Object
(
[rid] => 202211057919346
[uid] => O19346
[trainid] => 1T91
[sdd] => 2022-11-05
[operator] => Great Western Railway
[operatorCode] => GW
[std] => 2022-11-05T21:55:00
[etd] => 2022-11-05T21:55:00
[departureType] => Forecast
[departureSource] => TD
[platform] => 7
[origin] => stdClass Object
(
[location] => Array
(
[0] => stdClass Object
(
[locationName] => London Paddington
[crs] => PAD
[tiploc] => PADTON
)
)
)
[destination] => stdClass Object
(
[location] => Array
(
[0] => stdClass Object
(
[locationName] => Heathrow Airport T5
[crs] => HWV
[tiploc] => HTRWTM5
)
)
)
[category] => OO
[activities] => TB
)
[2] => stdClass Object
(
[rid] => 202211057051484
[uid] => F51484
[trainid] => 9U04
[rsid] => XR134700
[sdd] => 2022-11-05
[operator] => Elizabeth Line
[operatorCode] => XR
[std] => 2022-11-05T21:58:00
[etd] => 2022-11-05T21:58:00
[departureType] => Forecast
[departureSource] => Darwin
[platform] => A
[origin] => stdClass Object
(
[location] => Array
(
[0] => stdClass Object
(
[locationName] => London Paddington
[crs] => PAD
[tiploc] => PADTLL
)
)
)
[destination] => stdClass Object
(
[location] => Array
(
[0] => stdClass Object
(
[locationName] => Abbey Wood
[crs] => ABW
[tiploc] => ABWDXR
)
)
)
[category] => OO
[activities] => TB
)
[3] => stdClass Object
(
[rid] => 202211057051488
[uid] => F51488
[trainid] => 9U06
[rsid] => XR135100
[sdd] => 2022-11-05
[operator] => Elizabeth Line
[operatorCode] => XR
[std] => 2022-11-05T22:08:00
[etd] => 2022-11-05T22:08:00
[departureType] => Forecast
[departureSource] => Darwin
[platform] => A
[origin] => stdClass Object
(
[location] => Array
(
[0] => stdClass Object
(
[locationName] => London Paddington
[crs] => PAD
[tiploc] => PADTLL
)
)
)
[destination] => stdClass Object
(
[location] => Array
(
[0] => stdClass Object
(
[locationName] => Abbey Wood
[crs] => ABW
[tiploc] => ABWDXR
)
)
)
[category] => OO
[activities] => TB
)
[4] => stdClass Object
(
[rid] => 202211057919347
[uid] => O19347
[trainid] => 1T92
[sdd] => 2022-11-05
[operator] => Great Western Railway
[operatorCode] => GW
[std] => 2022-11-05T22:10:00
[etd] => 2022-11-05T22:10:00
[departureType] => Forecast
[departureSource] => TD
[platform] => 6
[platformIsHidden] => 1
[origin] => stdClass Object
(
[location] => Array
(
[0] => stdClass Object
(
[locationName] => London Paddington
[crs] => PAD
[tiploc] => PADTON
)
)
)
[destination] => stdClass Object
(
[location] => Array
(
[0] => stdClass Object
(
[locationName] => Heathrow Airport T5
[crs] => HWV
[tiploc] => HTRWTM5
)
)
)
[category] => OO
[activities] => TB
)
[5] => stdClass Object
(
[rid] => 202211057051492
[uid] => F51492
[trainid] => 9U08
[rsid] => XR135500
[sdd] => 2022-11-05
[operator] => Elizabeth Line
[operatorCode] => XR
[std] => 2022-11-05T22:18:00
[etd] => 2022-11-05T22:18:00
[departureType] => Forecast
[departureSource] => Darwin
[platform] => A
[origin] => stdClass Object
(
[location] => Array
(
[0] => stdClass Object
(
[locationName] => London Paddington
[crs] => PAD
[tiploc] => PADTLL
)
)
)
[destination] => stdClass Object
(
[location] => Array
(
[0] => stdClass Object
(
[locationName] => Abbey Wood
[crs] => ABW
[tiploc] => ABWDXR
)
)
)
[category] => OO
[activities] => TB
)
[6] => stdClass Object
(
[rid] => 202211057919350
[uid] => O19350
[trainid] => 1T93
[sdd] => 2022-11-05
[operator] => Great Western Railway
[operatorCode] => GW
[std] => 2022-11-05T22:25:00
[etd] => 2022-11-05T22:25:00
[departureType] => Forecast
[departureSource] => Darwin
[platform] => 7
[platformIsHidden] => 1
[origin] => stdClass Object
(
[location] => Array
(
[0] => stdClass Object
(
[locationName] => London Paddington
[crs] => PAD
[tiploc] => PADTON
)
)
)
[destination] => stdClass Object
(
[location] => Array
(
[0] => stdClass Object
(
[locationName] => Heathrow Airport T5
[crs] => HWV
[tiploc] => HTRWTM5
)
)
)
[category] => OO
[activities] => TB
)
[7] => stdClass Object
(
[rid] => 202211057051497
[uid] => F51497
[trainid] => 9U10
[rsid] => XR136000
[sdd] => 2022-11-05
[operator] => Elizabeth Line
[operatorCode] => XR
[std] => 2022-11-05T22:28:00
[etd] => 2022-11-05T22:28:00
[departureType] => Forecast
[departureSource] => Darwin
[platform] => A
[origin] => stdClass Object
(
[location] => Array
(
[0] => stdClass Object
(
[locationName] => London Paddington
[crs] => PAD
[tiploc] => PADTLL
)
)
)
[destination] => stdClass Object
(
[location] => Array
(
[0] => stdClass Object
(
[locationName] => Abbey Wood
[crs] => ABW
[tiploc] => ABWDXR
)
)
)
[category] => OO
[activities] => TB
)
[8] => stdClass Object
(
[rid] => 202211057051502
[uid] => F51502
[trainid] => 9U12
[rsid] => XR136500
[sdd] => 2022-11-05
[operator] => Elizabeth Line
[operatorCode] => XR
[std] => 2022-11-05T22:38:00
[etd] => 2022-11-05T22:38:00
[departureType] => Forecast
[departureSource] => Darwin
[platform] => A
[origin] => stdClass Object
(
[location] => Array
(
[0] => stdClass Object
(
[locationName] => London Paddington
[crs] => PAD
[tiploc] => PADTLL
)
)
)
[destination] => stdClass Object
(
[location] => Array
(
[0] => stdClass Object
(
[locationName] => Abbey Wood
[crs] => ABW
[tiploc] => ABWDXR
)
)
)
[category] => OO
[activities] => TB
)
[9] => stdClass Object
(
[rid] => 202211057919351
[uid] => O19351
[trainid] => 1T94
[sdd] => 2022-11-05
[operator] => Great Western Railway
[operatorCode] => GW
[std] => 2022-11-05T22:40:00
[etd] => 2022-11-05T22:40:00
[departureType] => Forecast
[departureSource] => Darwin
[platform] => 6
[platformIsHidden] => 1
[origin] => stdClass Object
(
[location] => Array
(
[0] => stdClass Object
(
[locationName] => London Paddington
[crs] => PAD
[tiploc] => PADTON
)
)
)
[destination] => stdClass Object
(
[location] => Array
(
[0] => stdClass Object
(
[locationName] => Heathrow Airport T5
[crs] => HWV
[tiploc] => HTRWTM5
)
)
)
[category] => OO
[activities] => TB
)
)
)
)
)

3
php/LDB-Tests/test.php Executable file
View File

@ -0,0 +1,3 @@
<?php
phpinfo();
?>

341
php/openLDBSVWS.php Normal file
View File

@ -0,0 +1,341 @@
<?php
class OpenLDBSVWS
{
private $accessToken;
private $trace;
private $wsdl = '<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:sv="http://thalesgroup.com/RTTI/2017-10-01/ldbsv/"
targetNamespace="http://thalesgroup.com/RTTI/2017-10-01/ldbsv/">
<wsdl:import
namespace="http://thalesgroup.com/RTTI/2017-10-01/ldbsv/"
location="http://lite.realtime.nationalrail.co.uk/OpenLDBSVWS/rtti_2017-10-01_ldbsv.wsdl"/>
<wsdl:service name="ldbsv">
<wsdl:port name="LDBSVServiceSoap12" binding="sv:LDBSVServiceSoap12">
<soap12:address location="http://lite.realtime.nationalrail.co.uk/OpenLDBSVWS/ldbsv12.asmx"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>';
function __construct($accessToken,$trace=FALSE)
{
$this->accessToken = $accessToken;
$this->trace = $trace;
$soapOptions = array("trace"=>$this->trace,"soap_version"=>SOAP_1_2,"features"=>SOAP_SINGLE_ELEMENT_ARRAYS);
if (extension_loaded("zlib")) $soapOptions["compression"] = SOAP_COMPRESSION_ACCEPT|SOAP_COMPRESSION_GZIP;
$this->soapClient = new SoapClient("data:text/plain;base64,".base64_encode($this->wsdl),$soapOptions);
$soapVar = new SoapVar(array("ns2:TokenValue"=>$this->accessToken),SOAP_ENC_OBJECT);
$soapHeader = new SoapHeader("http://thalesgroup.com/RTTI/2010-11-01/ldb/commontypes","AccessToken",$soapVar,FALSE);
$this->soapClient->__setSoapHeaders($soapHeader);
}
private function call($method,$params)
{
try
{
$response = $this->soapClient->$method($params);
}
catch(SoapFault $soapFault)
{
if ($this->trace)
{
$traceOutput["soapFaultMessage"] = $soapFault->getMessage();
$traceOutput["soapClientRequest"] = str_replace($this->accessToken,"",$this->soapClient->__getLastRequest());
$traceOutput["soapClientResponse"] = $this->soapClient->__getLastResponse();
print_r($traceOutput);
}
}
return (isset($response)?$response:FALSE);
}
function GetBoardByCRS($method,$numRows,$crs,$time,$timeWindow,$filtercrs,$filterType,$filterTOC,$services,$getNonPassengerServices)
{
$params = array();
if ($numRows) $params["numRows"] = $numRows;
if ($crs) $params["crs"] = $crs;
if ($time) $params["time"] = $time;
if ($timeWindow) $params["timeWindow"] = $timeWindow;
if ($filtercrs) $params["filtercrs"] = $filtercrs;
if ($filterType) $params["filterType"] = $filterType;
if ($filterTOC) $params["filterTOC"] = $filterTOC;
if ($services) $params["services"] = $services;
if ($getNonPassengerServices) $params["getNonPassengerServices"] = $getNonPassengerServices;
return $this->call($method,$params);
}
function GetArrivalDepartureBoardByCRS($numRows="",$crs="",$time="",$timeWindow="",$filtercrs="",$filterType="",$filterTOC="",$services="",$getNonPassengerServices="")
{
return $this->GetBoardByCRS("GetArrivalDepartureBoardByCRS",$numRows,$crs,$time,$timeWindow,$filtercrs,$filterType,$filterTOC,$services,$getNonPassengerServices);
}
function GetArrivalBoardByCRS($numRows="",$crs="",$time="",$timeWindow="",$filtercrs="",$filterType="",$filterTOC="",$services="",$getNonPassengerServices="")
{
return $this->GetBoardByCRS("GetArrivalBoardByCRS",$numRows,$crs,$time,$timeWindow,$filtercrs,$filterType,$filterTOC,$services,$getNonPassengerServices);
}
function GetDepartureBoardByCRS($numRows="",$crs="",$time="",$timeWindow="",$filtercrs="",$filterType="",$filterTOC="",$services="",$getNonPassengerServices="")
{
return $this->GetBoardByCRS("GetDepartureBoardByCRS",$numRows,$crs,$time,$timeWindow,$filtercrs,$filterType,$filterTOC,$services,$getNonPassengerServices);
}
function GetArrDepBoardWithDetails($numRows="",$crs="",$time="",$timeWindow="",$filtercrs="",$filterType="",$filterTOC="",$services="",$getNonPassengerServices="")
{
return $this->GetBoardByCRS("GetArrDepBoardWithDetails",$numRows,$crs,$time,$timeWindow,$filtercrs,$filterType,$filterTOC,$services,$getNonPassengerServices);
}
function GetArrBoardWithDetails($numRows="",$crs="",$time="",$timeWindow="",$filtercrs="",$filterType="",$filterTOC="",$services="",$getNonPassengerServices="")
{
return $this->GetBoardByCRS("GetArrBoardWithDetails",$numRows,$crs,$time,$timeWindow,$filtercrs,$filterType,$filterTOC,$services,$getNonPassengerServices);
}
function GetDepBoardWithDetails($numRows="",$crs="",$time="",$timeWindow="",$filtercrs="",$filterType="",$filterTOC="",$services="",$getNonPassengerServices="")
{
return $this->GetBoardByCRS("GetDepBoardWithDetails",$numRows,$crs,$time,$timeWindow,$filtercrs,$filterType,$filterTOC,$services,$getNonPassengerServices);
}
function GetBoardByTIPLOC($method,$numRows,$tiploc,$time,$timeWindow,$filterTiploc,$filterType,$filterTOC,$services,$getNonPassengerServices)
{
$params = array();
if ($numRows) $params["numRows"] = $numRows;
if ($tiploc) $params["tiploc"] = $tiploc;
if ($time) $params["time"] = $time;
if ($timeWindow) $params["timeWindow"] = $timeWindow;
if ($filterTiploc) $params["filterTiploc"] = $filterTiploc;
if ($filterType) $params["filterType"] = $filterType;
if ($filterTOC) $params["filterTOC"] = $filterTOC;
if ($services) $params["services"] = $services;
if ($getNonPassengerServices) $params["getNonPassengerServices"] = $getNonPassengerServices;
return $this->call($method,$params);
}
function GetArrivalDepartureBoardByTIPLOC($numRows="",$tiploc="",$time="",$timeWindow="",$filterTiploc="",$filterType="",$filterTOC="",$services="",$getNonPassengerServices="")
{
return $this->GetBoardByTIPLOC("GetArrivalDepartureBoardByTIPLOC",$numRows,$tiploc,$time,$timeWindow,$filterTiploc,$filterType,$filterTOC,$services,$getNonPassengerServices);
}
function GetArrivalBoardByTIPLOC($numRows="",$tiploc="",$time="",$timeWindow="",$filterTiploc="",$filterType="",$filterTOC="",$services="",$getNonPassengerServices="")
{
return $this->GetBoardByTIPLOC("GetArrivalBoardByTIPLOC",$numRows,$tiploc,$time,$timeWindow,$filterTiploc,$filterType,$filterTOC,$services,$getNonPassengerServices);
}
function GetDepartureBoardByTIPLOC($numRows="",$tiploc="",$time="",$timeWindow="",$filterTiploc="",$filterType="",$filterTOC="",$services="",$getNonPassengerServices="")
{
return $this->GetBoardByTIPLOC("GetDepartureBoardByTIPLOC",$numRows,$tiploc,$time,$timeWindow,$filterTiploc,$filterType,$filterTOC,$services,$getNonPassengerServices);
}
function GetDepartures($method,$crs,$filterList,$time,$timeWindow,$filterTOC,$services)
{
$params = array();
if ($crs) $params["crs"] = $crs;
if ($filterList) $params["filterList"] = $filterList;
if ($time) $params["time"] = $time;
if ($timeWindow) $params["timeWindow"] = $timeWindow;
if ($filterTOC) $params["filterTOC"] = $filterTOC;
if ($services) $params["services"] = $services;
return $this->call($method,$params);
}
function GetNextDepartures($crs="",$filterList="",$time="",$timeWindow="",$filterTOC="",$services="")
{
return $this->GetDepartures("GetNextDepartures",$crs,$filterList,$time,$timeWindow,$filterTOC,$services);
}
function GetFastestDepartures($crs="",$filterList="",$time="",$timeWindow="",$filterTOC="",$services="")
{
return $this->GetDepartures("GetFastestDepartures",$crs,$filterList,$time,$timeWindow,$filterTOC,$services);
}
function GetNextDeparturesWithDetails($crs="",$filterList="",$time="",$timeWindow="",$filterTOC="",$services="")
{
return $this->GetDepartures("GetNextDeparturesWithDetails",$crs,$filterList,$time,$timeWindow,$filterTOC,$services);
}
function GetFastestDeparturesWithDetails($crs="",$filterList="",$time="",$timeWindow="",$filterTOC="",$services="")
{
return $this->GetDepartures("GetFastestDeparturesWithDetails",$crs,$filterList,$time,$timeWindow,$filterTOC,$services);
}
function GetServiceDetailsByRID($rid="")
{
$params = array();
if ($rid) $params["rid"] = $rid;
return $this->call("GetServiceDetailsByRID",$params);
}
function QueryServices($serviceID="",$sdd="",$filterTime="",$filtercrs="",$tocFilter="")
{
$params = array();
if ($serviceID) $params["serviceID"] = $serviceID;
if ($sdd) $params["sdd"] = $sdd;
if ($filterTime) $params["filterTime"] = $filterTime;
if ($filtercrs) $params["filtercrs"] = $filtercrs;
if ($tocFilter) $params["tocFilter"] = $tocFilter;
return $this->call("QueryServices",$params);
}
function GetDisruptionList($CRSList="")
{
$params = array();
if ($CRSList) $params["CRSList"] = $CRSList;
return $this->call("GetDisruptionList",$params);
}
}
class OpenLDBSVREFWS
{
private $accessToken;
private $trace;
private $wsdl = '<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:sv="http://thalesgroup.com/RTTI/2017-10-01/ldbsv/"
targetNamespace="http://thalesgroup.com/RTTI/2017-10-01/ldbsv/">
<wsdl:import
namespace="http://thalesgroup.com/RTTI/2015-05-14/ldbsv_ref/"
location="http://lite.realtime.nationalrail.co.uk/OpenLDBSVWS/rtti_2015-05-14_ldbsv_ref.wsdl"/>
<wsdl:service name="ldbsv">
<wsdl:port name="LDBSVRefServiceSoap12" binding="ref:LDBSVRefServiceSoap12">
<soap12:address location="http://lite.realtime.nationalrail.co.uk/OpenLDBSVWS/ldbsvref.asmx"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>';
function __construct($accessToken,$trace=FALSE)
{
$this->accessToken = $accessToken;
$this->trace = $trace;
$soapOptions = array("trace"=>$this->trace,"soap_version"=>SOAP_1_2,"features"=>SOAP_SINGLE_ELEMENT_ARRAYS);
if (extension_loaded("zlib")) $soapOptions["compression"] = SOAP_COMPRESSION_ACCEPT|SOAP_COMPRESSION_GZIP;
$this->soapClient = new SoapClient("data:text/plain;base64,".base64_encode($this->wsdl),$soapOptions);
$soapVar = new SoapVar(array("ns2:TokenValue"=>$this->accessToken),SOAP_ENC_OBJECT);
$soapHeader = new SoapHeader("http://thalesgroup.com/RTTI/2010-11-01/ldb/commontypes","AccessToken",$soapVar,FALSE);
$this->soapClient->__setSoapHeaders($soapHeader);
}
private function call($method,$params)
{
try
{
$response = $this->soapClient->$method($params);
}
catch(SoapFault $soapFault)
{
if ($this->trace)
{
$traceOutput["soapFaultMessage"] = $soapFault->getMessage();
$traceOutput["soapClientRequest"] = str_replace($this->accessToken,"",$this->soapClient->__getLastRequest());
$traceOutput["soapClientResponse"] = $this->soapClient->__getLastResponse();
print_r($traceOutput);
}
}
return (isset($response)?$response:FALSE);
}
function GetReasonCode($reasonCode="")
{
$params = array();
if ($reasonCode) $params["reasonCode"] = $reasonCode;
return $this->call("GetReasonCode",$params);
}
function GetReasonCodeList()
{
$params = array();
return $this->call("GetReasonCodeList",$params);
}
function GetSourceInstanceNames()
{
$params = array();
return $this->call("GetSourceInstanceNames",$params);
}
function GetTOCList($currentVersion="")
{
$params = array();
if ($currentVersion) $params["currentVersion"] = $currentVersion;
return $this->call("GetTOCList",$params);
}
function GetStationList($currentVersion="")
{
$params = array();
if ($currentVersion) $params["currentVersion"] = $currentVersion;
return $this->call("GetStationList",$params);
}
}
?>

41
php/submitIssue.php Normal file
View File

@ -0,0 +1,41 @@
<?php
function sendInput($title,$body) {
// Get API Key for git.fjla.uk
require '/srv/keys/athena/apiKeys.php';
// Set httpHeaders
$httpHeaders = array(
"accept: application/json",
$giteaKey,
"Content-Type: application/json"
);
// Prepare the request
$rawData = array(
'body' => $body,
'title' => $title
);
$preparedData = json_encode($rawData);
// Prepare CURL
$curlConnection = curl_init('https://git.fjla.uk/api/v1/repos/fred.boniface/athena.fb-infra.uk/issues');
curl_setopt($curlConnection, CURLOPT_POSTFIELDS, $preparedData);
curl_setopt($curlConnection, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curlConnection, CURLOPT_HTTPHEADER, $httpHeaders);
// Get response and exit CURL
$response = curl_exec($curlConnection);
curl_close($curlConnection);
return $response;
}
function cleanInput($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}

2
php/version.php Normal file
View File

@ -0,0 +1,2 @@
<?php
$athenaVersion = '0.4.4-alpha';

View File

@ -1,23 +0,0 @@
function openMenu() {
document.getElementById("menu").style.display = "block";
}
function closeMenu() {
document.getElementById("menu").style.display = "none";
}
function closeAboutPopup() {
document.getElementById("popup-about").style.display = "none";
}
function openAboutPopup() {
document.getElementById("popup-about").style.display = "block";
}
function closeTiplocPopup() {
document.getElementById("popup-tiploc").style.display = "none";
}
function openTiplocPopup() {
document.getElementById("popup-tiploc").style.display = "block";
}

View File

@ -1,31 +1,78 @@
/* COLOR VARS */
:root {
--main-bg-color: #aac4ee;
--accent-color: #7fa7e6;
--overlay-color: #7fa6e6de;
--main-text-color: #016ec7;
--link-color: azure;
--link-visited-color: azure;
}
body {
background-color: #aac4ee;
color: #359aff;
background-color: var(--main-bg-color);
color: var(--main-text-color);
font-family: sans-serif;
text-align: center;
padding-bottom: 60px; /*Footer height*/
}
.titleimg {
width: 80%;
padding-top: 50px;
padding-bottom: 50px;
padding-bottom: 10px;
max-width: 500px;
transition: 0.2s;
}
.lookup-box {
text-align: center;
border: black;
padding-top: 40px;
border-radius: 40px;
padding: 10px;
margin-bottom: 5px;
font-size: 18px;
text-transform: uppercase;
transition: 0.2s;
}
.form-text-small {
text-align: center;
border: black;
width: 80%;
border-radius: 5px;
padding: 10px;
font-size: 18px;
transition: 0.2s;
}
@media only screen and (min-width: 600px) {.form-text-small{width: 50%}}
.form-text-large {
text-align: left;
border: black;
width: 80%;
height: 90px;
border-radius: 5px;
padding: 5px;
font-size: 16px;
transition: 0.2s;
}
@media only screen and (min-width: 600px) {.form-text-large{width: 50%}}
.form-info {
color: var(--main-text-color);
font-size: 17px;
font-weight: bolder;
margin-bottom: 4px;
}
.text-description {
display: inline-block;
width: 80%;
color: var(--main-text-color);
padding-top: 5px;
padding-bottom: 5px;
margin-left: auto;
margin-right: auto;
transition: 0.2s;
}
@media only screen and (min-width: 600px) {.text-description{width: 50%}}
.lookup-button {
background-color: #3c78d8;
color: #f6f5f4;
color: var(--link-color);
border: none;
border-radius: 18px;
font-size: 16px;
@ -33,93 +80,88 @@ body {
padding: 5px;
padding-left: 15px;
padding-right: 15px;
margin-bottom: 10px;
cursor: pointer;
}
a {
display: float;
background-color: #3c78d8;
color: #f6f5f4;
padding: 7px;
border-radius: 5px;
text-decoration: none;
margin-bottom: 10px;
line-height: 3;
}
.quicklink {
.actionbutton {
display: inline-block;
text-decoration: none;
cursor: pointer;
background-color: #3c78d8;
border: none;
border-radius: 10px;
color: #f6f5f4;
color: var(--link-color);
padding: 7px;
margin-bottom: 10px;
font-size: 16px;
}
.menu {
display: none;
background-color: #3c78d8;
width: 100%;
position: fixed;
top: 0;
left: 0;
padding-top: 10px;
padding-bottom: 10px;
}
.menu-button {
position: absolute;
background-color: #aac4ee;
border: none;
right: 30px;
.inlinelink {
text-decoration: underline;
color: var(--link-color);
cursor: pointer;
}
.menuitem {
background-color: #2256aa;
color: #f6f5f4;
border: none;
border-radius: 18px;
font-size: 16px;
font-weight: bold;
padding: 3px;
padding-left: 8px;
padding-right: 8px;
cursor: pointer;
}
.menuitem:hover {
background-color: #112b55;
}
.popup-info {
display: none;
/* START MENU STYLE */
#menubar_hamburger {
position: absolute;
margin: 0 auto;
left: 0;
top: 2px;
right: 0;
top: 20px;
width: 80%;
background-color: rgba(41,106,163,0.9);
color: white;
border-radius: 50px;
padding: 30px;
padding: 5px;
}
.popup-close {
position: absolute;
right: 30px;
cursor: pointer;
.sidebar_control {
background-color: transparent;
color: var(--link-color);
border: none;
font-family: sans-serif;
font-size: larger;
}
#sidebar_open_short {display: block;}
#sidebar_close_short {
display: none;
font-size: x-large;
}
#sidebar {
position: fixed;
top: 40px;
right: 0;
margin: auto;
display: block;
max-width: 250px;
width: 0;
border-top-left-radius: 45px;
border-bottom-left-radius: 45px;
background-color: var(--overlay-color);
transition: 0.4s;
}
#sidebar a {
padding: 8px 8px 8px 8px;
margin-top: 10px;
margin-bottom: 10px;
font-family: indie-flower, sans-serif;
font-weight: 300;
text-decoration: none;
text-align: center;
font-size: 25px;
color: var(--link-color);
display: block;
white-space: nowrap;
transition: 0.5s;
}
/* Footer Styles */
footer {
background-color: #7fa7e6;
background-color: var(--accent-color);
color: white;
width: 100%;
position: fixed;
bottom: 0;
left: 0;
}
footer a {
text-decoration: underline;
color: white;
}
footer a:visited {
color: white;
}
footer a:hover {
color: beige;
}

40
submit-done.php Normal file
View File

@ -0,0 +1,40 @@
<!DOCTYPE html>
<html>
<head>
<?php include './page-blocks/headers.php';?>
<title>Sent</title>
</head>
<body>
<!-- Popup Menu -->
<?php require "./page-blocks/nav-menu.php";?>
<!-- Main Content Begins -->
<?php require "./page-blocks/title-image.php";?>
<br>
<h1>Report Submitted</h1>
<div class="text-description">
<p>Thanks for your report or suggestion.</p>
<p>You're helping to make Athena better for everyone.</p>
<br>
<br>
<p>You will be redirected to the homepage in three seconds.</p>
</div>
<script>
setTimeout(function(){
window.location.href = '/';
}, 3000);
</script>
<!-- Footer -->
<?php include "./page-blocks/footer.php" ?>
</body>
</html>