Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • kszk/devteam/kszkepzes/old/kszkepzes-frontend
  • kbgergely/kszkepzes-frontend
2 results
Show changes
Commits on Source (80)
Showing
with 24514 additions and 14939 deletions
variables: variables:
CONTAINER_IMAGE: 'registry.kszk.bme.hu/kszk/devteam/$CI_PROJECT_NAME:$CI_COMMIT_REF_NAME' CONTAINER_IMAGE: 'harbor.sch.bme.hu/kszk-kepzes/frontend:$CI_COMMIT_REF_NAME'
stages: stages:
- Pre Build - Pre Build
...@@ -8,9 +8,11 @@ stages: ...@@ -8,9 +8,11 @@ stages:
PreBuild: PreBuild:
stage: Pre Build stage: Pre Build
tags: [docker] # tags: [kszk]
image: node:latest image: node:14.19-alpine3.14
script: script:
- 'echo -n "Node version: " && node --version \
&& echo -n "NPM version: " && npm --version'
- npm install - npm install
- npm run build - npm run build
cache: cache:
...@@ -25,29 +27,32 @@ PreBuild: ...@@ -25,29 +27,32 @@ PreBuild:
Docker build: Docker build:
stage: Docker Build stage: Docker Build
tags: [docker] # tags: [kszk]
only: only:
- tags - tags
image: image:
name: gcr.io/kaniko-project/executor:debug name: gcr.io/kaniko-project/executor:debug
entrypoint: [''] entrypoint: ['']
script: script:
- echo "{\"auths\":{\"registry.kszk.bme.hu\":{\"username\":\"$REGISTRY_USER\",\"password\":\"$REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json - echo "{\"auths\":{\"harbor.sch.bme.hu\":{\"username\":\"$REGISTRY_USER\",\"password\":\"$REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $CONTAINER_IMAGE - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $CONTAINER_IMAGE
Deploy to Kubernetes: Deploy to Kubernetes:
stage: deploy stage: deploy
image: alpine image: alpine
tags: [k9r]
environment: environment:
name: master name: master
script: before_script:
- chmod 600 $KUBECONFIG
- apk add --no-cache curl - apk add --no-cache curl
- curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" - curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
- chmod +x ./kubectl - chmod +x ./kubectl
- mv ./kubectl /usr/local/bin/kubectl - mv ./kubectl /usr/local/bin/kubectl
- kubectl version - kubectl version
script:
- cd k8s - cd k8s
- sed -i "s|##IMAGETAG##|${CI_COMMIT_REF_NAME}|" deployment.yaml - sed -i "s|##IMAGETAG##|${CI_COMMIT_REF_NAME}|" deployment.yaml
- kubectl apply -f deployment.yaml - kubectl apply -f ./
only: only:
- tags - tags
...@@ -3,12 +3,14 @@ apiVersion: apps/v1 ...@@ -3,12 +3,14 @@ apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
name: kszkepzes-frontend name: kszkepzes-frontend
namespace: devteam-kszk-bme-hu namespace: kszk-kepzes-site
spec: spec:
replicas: 1 replicas: 1
selector: selector:
matchLabels: matchLabels:
app: kszkepzes-frontend app: kszkepzes-frontend
strategy:
type: Recreate
template: template:
metadata: metadata:
labels: labels:
...@@ -16,9 +18,12 @@ spec: ...@@ -16,9 +18,12 @@ spec:
spec: spec:
containers: containers:
- name: kszkepzes-frontend - name: kszkepzes-frontend
image: registry.kszk.bme.hu/kszk/devteam/kszkepzes-frontend:##IMAGETAG## image: harbor.sch.bme.hu/kszk-kepzes/frontend:##IMAGETAG##
imagePullPolicy: 'Always' imagePullPolicy: 'Always'
ports: ports:
- containerPort: 3000 - containerPort: 3000
resources:
limits:
memory: 200Mi
imagePullSecrets: imagePullSecrets:
- name: kszkepzes-regcred - name: harbor
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: kszk-kepzes-site
annotations:
cert-manager.io/cluster-issuer: letsencrypt
kubernetes.io/tls-acme: "true"
name: kszkepzes-frontend
spec:
rules:
- host: "ujonc.kszk.bme.hu"
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: kszkepzes-frontend
port:
number: 3000
tls:
- hosts:
- "ujonc.kszk.bme.hu"
secretName: kszkepzes-cert
\ No newline at end of file
...@@ -3,7 +3,7 @@ apiVersion: v1 ...@@ -3,7 +3,7 @@ apiVersion: v1
kind: Service kind: Service
metadata: metadata:
name: kszkepzes-frontend name: kszkepzes-frontend
namespace: devteam-kszk-bme-hu namespace: kszk-kepzes-site
spec: spec:
type: ClusterIP type: ClusterIP
ports: ports:
......
...@@ -50,7 +50,7 @@ http { ...@@ -50,7 +50,7 @@ http {
try_files $uri =404; try_files $uri =404;
expires 1y; expires 1y;
access_log off; access_log off;
add_header Cache-Control "public"; add_header Cache-Control "public, max-age=60";
} }
# Any route containing a file extension (e.g. /devicesfile.js) # Any route containing a file extension (e.g. /devicesfile.js)
......
Source diff could not be displayed: it is too large. Options to address this: view the blob.
<!doctype html> <!DOCTYPE html>
<html lang="hu"> <html lang="hu">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta
<meta name="theme-color" content="#000000"> name="viewport"
content="width=device-width, initial-scale=1, shrink-to-fit=no"
/>
<meta name="theme-color" content="#000000" />
<!-- <!--
manifest.json provides metadata used when your web app is added to the manifest.json provides metadata used when your web app is added to the
homescreen on Android. See https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/ homescreen on Android. See https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/
--> -->
<meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" /> <meta http-equiv="Expires" content="0" />
<link rel="manifest" href="%PUBLIC_URL%/manifest.json"> <link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico"> <link
<link rel="stylesheet" href="index.css"> rel="shortcut icon"
type="image/svg+xml"
href="%PUBLIC_URL%/kszk_circle_lightblue.svg"
/>
<link rel="stylesheet" href="%PUBLIC_URL%/index.css" />
<!-- <!--
Notice the use of %PUBLIC_URL% in the tags above. Notice the use of %PUBLIC_URL% in the tags above.
It will be replaced with the URL of the `public` folder during the build. It will be replaced with the URL of the `public` folder during the build.
...@@ -22,12 +29,10 @@ ...@@ -22,12 +29,10 @@
work correctly both with client-side routing and a non-root public URL. work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`. Learn how to configure a non-root public URL by running `npm run build`.
--> -->
<title>KSZKépzés 2020</title> <title>KSZKépzés 2025</title>
</head> </head>
<body> <body>
<noscript> <noscript> You need to enable JavaScript to run this app. </noscript>
You need to enable JavaScript to run this app.
</noscript>
<div id="root" style="height: 100%"></div> <div id="root" style="height: 100%"></div>
<!-- <!--
This HTML file is a template. This HTML file is a template.
......
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1024"
height="1024"
viewBox="0 0 270.93333 270.93334"
version="1.1"
id="svg8"
inkscape:export-filename="kszk_circle_lighblue.png"
inkscape:export-xdpi="96.000008"
inkscape:export-ydpi="96.000008"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="kszk_circle_lightblue.svg">
<defs
id="defs2">
<linearGradient
id="linearGradient2383"
osb:paint="solid">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop2381" />
</linearGradient>
<inkscape:path-effect
effect="spiro"
id="path-effect3713"
is_visible="true" />
<inkscape:path-effect
effect="spiro"
id="path-effect3709"
is_visible="true" />
<inkscape:path-effect
effect="spiro"
id="path-effect3707"
is_visible="true" />
<filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow"
id="filter1431">
<feFlood
flood-opacity="0.196078"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood1421" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite1423" />
<feGaussianBlur
in="composite1"
stdDeviation="4.1"
result="blur"
id="feGaussianBlur1425" />
<feOffset
dx="0"
dy="1.1"
result="offset"
id="feOffset1427" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
result="composite2"
id="feComposite1429" />
</filter>
<filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow"
id="filter1245">
<feFlood
flood-opacity="0.356863"
flood-color="rgb(46,46,46)"
result="flood"
id="feFlood1235" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite1237" />
<feGaussianBlur
in="composite1"
stdDeviation="9.3"
result="blur"
id="feGaussianBlur1239" />
<feOffset
dx="4.57967e-015"
dy="7.6"
result="offset"
id="feOffset1241" />
<feComposite
in="offset"
in2="SourceGraphic"
operator="out"
result="composite2"
id="feComposite1243" />
</filter>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.5"
inkscape:cx="308.27755"
inkscape:cy="482.50482"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1014"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:snap-grids="true"
inkscape:snap-to-guides="true"
inkscape:snap-page="true"
inkscape:pagecheckerboard="false"
showborder="true"
borderlayer="false"
inkscape:showpageshadow="true">
<inkscape:grid
type="xygrid"
id="grid4565"
empspacing="4"
spacingx="2.1166667"
spacingy="2.1166667"
dotted="false" />
</sodipodi:namedview>
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Sch"
style="display:none">
<rect
style="fill:#3051bf;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4530"
width="67.733337"
height="237.06667"
x="101.6"
y="16.933331"
ry="4.6411122e-007" />
<rect
style="fill:#3051bf;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4532"
width="25.399998"
height="220.1333"
x="67.733337"
y="33.866665"
ry="4.6411091e-007" />
<rect
style="fill:#3051bf;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4534"
width="25.399994"
height="220.1333"
x="177.8"
y="33.866665"
ry="4.6411091e-007" />
<path
style="fill:#3051bf;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 84.666666,186.26666 50.799999,220.13333 V 254 h 33.866667 v -67.73334"
id="path4538"
inkscape:connector-curvature="0" />
<path
style="fill:#3051bf;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 186.26667,186.26666 33.86666,33.86667 V 254 h -33.86666 v -67.73334"
id="path4540"
inkscape:connector-curvature="0" />
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="sch_persp"
style="display:inline">
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.69999981px;line-height:1.25;font-family:'Segoe Print';-inkscape-font-specification:'Segoe Print';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="-143.18919"
y="240.73776"
id="text846"><tspan
sodipodi:role="line"
id="tspan844"
x="-143.18919"
y="240.73776"
style="font-size:59.26666641px;stroke-width:0.26458332"
dx="0">K</tspan></text>
<image
y="-8.4666691"
x="-148.16667"
id="image864"
xlink:href="data:image/png;base64,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 "
preserveAspectRatio="none"
height="119.0625"
width="122.76667" />
<path
style="fill:#3051bf;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
d="M -778.93332,-67.733335 -965.19999,507.99999 h 389.46666 V -50.800002 Z"
id="path869"
inkscape:connector-curvature="0" />
<path
style="fill:#a806c9;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -609.60001,-33.86667 -67.73333,118.533343 203.2,-50.800008 z"
id="path871"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="display:inline;fill:#ffb623;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -609.60001,135.46667 -67.73333,118.53334 203.2,-50.80001 z"
id="path871-8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="display:inline;fill:#03a9f4;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -609.60001,304.8 -67.73333,118.53334 203.2,-50.8 z"
id="path871-1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="display:inline;fill:#b80000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M -863.60001,-2.6000001e-6 -931.33334,118.53334 l 203.2,-50.800013 z"
id="path871-3"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="display:inline;fill:#60c100;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -914.40002,135.46667 -67.73333,118.53334 203.2,-50.80001 z"
id="path871-7"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="display:inline;fill:#172081;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -931.33335,304.8 -67.73333,118.53334 203.2,-50.8 z"
id="path871-0"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="display:inline;fill:#27d4fa;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -127,719.66668 -67.73332,118.53334 203.199998,-50.8 z"
id="path871-0-1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
</g>
<g
inkscape:label="kukac"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-26.06665)"
style="display:inline">
<g
id="g874"
transform="matrix(1.1645259,0,0,1.1645259,-22.288117,-26.602416)"
style="stroke:none;stroke-opacity:1">
<path
transform="matrix(0.26458333,0,0,0.26458333,0,26.06665)"
id="path867"
d="M 512.04883,127.7832 C 358.99976,127.75431 217.0157,219.77058 156.93945,365.77148 87.191043,535.27819 147.01164,730.91423 299.61523,832.31445 452.17047,933.68259 654.81816,912.98511 783.77148,782.87109 L 744.78906,744.24023 C 633.96084,856.06602 461.08646,873.71867 329.98438,786.60547 198.93071,699.52447 147.77632,532.25874 207.68945,386.6543 267.60257,241.04984 421.57668,158.38486 575.87695,188.94531 c 154.3002,30.56045 265.23036,165.70356 265.23047,323.17969 4e-5,48.0011 -15.83603,71.5397 -38.3125,87.37891 -22.28149,15.70176 -54.25247,22.31594 -84.30664,22.42968 -3.65161,-4.8496 -14.37716,-23.60196 -17.20898,-34.07812 -1.33081,-4.92336 0.76032,-9.79761 1.17187,-10.93555 0.41137,-1.1379 11.88022,-12.5722 25.48633,-25.41015 27.12476,-25.59334 41.29688,-44.95373 41.29688,-52.18555 0,-3.539 -0.96632,-4.80705 -5.03907,-6.61328 -5.68021,-2.51913 -14.89484,-2.91844 -19.93359,-0.86328 -1.85038,0.75473 -16.0981,11.82447 -31.66016,24.59765 -15.56213,12.77318 -28.47257,23.03285 -28.6914,22.80078 -0.9261,-0.98298 10.30688,-46.12382 16.48437,-66.24414 3.69109,-12.02211 13.17068,-38.95237 21.06445,-59.84375 7.89381,-20.89137 14.35157,-39.09472 14.35157,-40.45312 0,-6.89231 -21.57769,-11.42784 -32.1211,-6.75196 -5.04533,2.23752 -5.49781,3.12382 -12.8457,25.24415 -12.03761,36.23837 -68.45828,216.07726 -76.9082,245.14062 -7.58801,26.09889 -7.63311,26.37164 -5.33399,32.4707 5.39815,14.31999 21.25874,15.26055 31.19727,1.84961 4.31346,-5.82047 13.83826,-27.40189 19.42187,-44.00781 l 7.25391,-15 7.21484,21.8418 c 12.57124,32.07439 23.75782,41.16286 41.99805,43.28711 1.04777,0.12196 2.3501,0.1006 3.73438,0.0293 37.26101,-0.21489 79.57575,-7.48873 114.99023,-32.44531 35.95865,-25.34003 61.5723,-70.42819 61.57227,-132.23828 -1.2e-4,-183.31567 -129.75559,-341.42579 -309.44922,-377.01562 -22.4617,-4.44873 -44.92989,-6.82621 -67.18946,-7.25586 -2.43464,-0.047 -4.86752,-0.0699 -7.29687,-0.0703 z M 362.60352,356.59375 c -4.32884,-0.0584 -8.74342,0.69231 -12.43164,2.45117 l -5.62696,2.6836 -13.73437,44.70703 c -14.43692,46.99494 -49.80211,169.38702 -59.9336,207.41992 -9.23129,34.65369 -10.18353,46.18396 -4.28125,51.85351 10.17474,9.7736 26.07305,-7.63649 39.97657,-43.78125 l 5.36328,-13.94531 5.37695,8.72852 c 10.0219,16.27336 25.37848,30.22709 39.80273,36.16601 10.41665,4.28897 25.5196,4.19105 34.90235,-0.22461 l 7.1543,-3.36718 3.74414,3.66211 c 9.6647,9.45063 23.03242,17.10838 34.125,19.54882 8.55575,1.88232 18.08027,0.33237 25.3164,-4.12109 18.35327,-11.29553 22.76171,-42.44127 11.125,-78.58984 -6.90678,-21.45517 -9.36247,-34.16011 -9.39648,-48.55274 -0.0301,-13.93685 2.20737,-21.45422 13.72461,-46.1289 7.4485,-15.95811 8.21457,-18.50275 7.625,-25.35938 -1.06685,-12.40811 -9.62054,-17.80141 -28.25391,-17.82031 -7.84815,-0.007 -9.65036,0.55785 -13.48242,4.23242 -3.95683,3.79423 -5.2581,7.65861 -12.32813,36.63281 -11.22417,45.99821 -31.11484,100.61198 -39.79101,109.25391 -2.09643,2.08819 -7.6799,6.64529 -12.4082,10.12695 -11.35567,8.36164 -17.15443,8.56182 -24.42774,0.8418 -8.59552,-9.12352 -17.11133,-29.68962 -17.11133,-41.32422 0,-1.06103 9.4304,-10.77515 20.95703,-21.58789 33.97833,-31.87381 45.69822,-46.36436 43.84375,-54.20703 -1.05773,-4.473 -5.28358,-5.6161 -14.15625,-3.83008 -11.91202,2.39785 -19.63608,7.50376 -45.5039,30.08398 -9.22117,8.04923 -16.76318,14.1081 -16.76172,13.4629 0.009,-2.99245 7.98739,-32.59167 14.03711,-52.07422 9.57519,-30.836 18.01308,-54.67186 30.3789,-85.82227 5.94063,-14.96493 10.80079,-28.95893 10.80079,-31.09766 0,-5.84702 -9.10157,-9.89309 -18.625,-10.02148 z m 265.00976,117.66797 c -23.86576,-0.18279 -81.89746,10.45517 -92.9082,18.02539 -13.9183,9.56927 -11.21172,29.9129 4.39648,33.04492 3.63651,0.72968 12.46716,-0.0571 25.08594,-2.23633 10.7102,-1.8497 19.72152,-3.09973 20.02539,-2.77734 0.30395,0.32262 -13.36442,14.13091 -30.37305,30.68555 -61.32011,59.68323 -72.89748,75.88188 -68.00976,95.14843 2.09359,8.25272 7.95584,15.09639 15.28711,17.84766 v -0.002 c 7.56767,2.84114 15.7432,2.83789 36.26562,-0.0176 34.33678,-4.77763 55.46004,-11.37487 64.0918,-20.01563 4.27211,-4.27672 5,-6.02622 5,-12.01367 0,-5.88729 -0.69329,-7.62631 -4.34375,-10.88672 -6.17548,-5.51539 -18.18627,-7.77633 -35.44922,-6.67187 l -14.36133,0.91797 9.27539,-8.67383 c 5.1018,-4.77082 21.43138,-21.57831 36.28711,-37.35156 29.55039,-31.37534 51.63335,-59.4514 53.04492,-67.4375 1.89173,-10.70351 -5.78498,-24.05195 -15.41601,-26.80469 -1.77821,-0.50823 -4.48904,-0.75514 -7.89844,-0.78125 z M 432.57617,592.58594 c 1.44959,0.0843 2.4092,5.25078 4.53516,16.31445 1.33379,6.94107 2.21939,15.10602 1.9707,18.14453 l -0.45117,5.52539 -7.89258,-6.26367 c -4.34048,-3.445 -8.42711,-6.26367 -9.08203,-6.26367 -2.03187,0 -1.38259,-2.21404 4.79883,-16.36524 3.18127,-7.28284 4.84204,-11.16619 6.12109,-11.09179 z"
style="display:inline;fill:#3faef7;fill-opacity:1;stroke:none;stroke-width:4.09700012;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</g>
</svg>
...@@ -58,6 +58,11 @@ export const getUserData = () => async (dispatch) => { ...@@ -58,6 +58,11 @@ export const getUserData = () => async (dispatch) => {
}); });
} catch (e) { } catch (e) {
console.log(e); console.log(e);
// Invalid session bug workaround
if (!e.response) {
window.location = "/oidc/logout"
}
} }
}; };
...@@ -105,6 +110,7 @@ export const submitRegistration = ({ ...@@ -105,6 +110,7 @@ export const submitRegistration = ({
alert('Mentés nem sikerült!'); alert('Mentés nem sikerült!');
} }
} catch (e) { } catch (e) {
console.log(e); console.log(e, e.response);
alert('Mentés nem sikerült!');
} }
}; };
...@@ -4,7 +4,7 @@ import Main from './Main'; ...@@ -4,7 +4,7 @@ import Main from './Main';
import React from 'react'; import React from 'react';
const App = () => ( const App = () => (
<div style={{ minHeight: '100%', position: 'relative' }}> <div style={{ minHeight: '100%', position: 'relative', paddingBottom: '3em' }}>
<header id="header"> <header id="header">
<Header /> <Header />
</header> </header>
......
import { Container, Segment } from 'semantic-ui-react'; import { Container, Segment } from "semantic-ui-react";
import React from 'react'; import React from "react";
const Footer = () => ( const Footer = () => (
<Segment inverted vertical textAlign="center"> <Segment inverted vertical textAlign="center">
<Container> <Container>
<p textalign="center">Created by DevTeam &copy; 2018-2020.</p> <p textalign="center">Created by DevTeam &copy; 2018-2025.</p>
</Container> </Container>
</Segment> </Segment>
); );
......
...@@ -7,64 +7,64 @@ import { ...@@ -7,64 +7,64 @@ import {
Popup, Popup,
Responsive, Responsive,
Segment, Segment,
} from 'semantic-ui-react'; } from "semantic-ui-react";
import React, { Component } from 'react'; import React, { Component } from "react";
import KSZKlogo from './images/kszk_logo.svg'; import KSZKlogo from "./images/kszk_logo.svg";
import { Link } from 'react-router-dom'; import { Link } from "react-router-dom";
import { connect } from 'react-redux'; import { connect } from "react-redux";
import { getUserData } from '../actions'; import { getUserData } from "../actions";
// Objects that will be converted to menu items in the render method // Objects that will be converted to menu items in the render method
const menuItems = [ const menuItems = [
{ {
text: 'Főoldal', text: "Főoldal",
to: '/home', to: "/home",
prefix: ( prefix: (
<Image size="mini" src={KSZKlogo} style={{ marginRight: '1.5em' }} /> <Image size="mini" src={KSZKlogo} style={{ marginRight: "1.5em" }} />
), ),
permissionLevel: 0, permissionLevel: 0,
}, },
{ {
text: 'Hírek', text: "Hírek",
to: '/news', to: "/news",
prefix: '', prefix: "",
permissionLevel: 0, permissionLevel: 0,
}, },
{ {
text: 'Köreink', text: "Köreink",
to: '/groups', to: "/groups",
prefix: '', prefix: "",
permissionLevel: 0, permissionLevel: 0,
}, },
{ {
text: 'Ütemterv', text: "Ütemterv",
to: '/schedule', to: "/schedule",
prefix: '', prefix: "",
permissionLevel: 1, permissionLevel: 1,
}, },
{ {
text: 'Mentorok', text: "Mentorok",
to: '/mentors', to: "/mentors",
prefix: '', prefix: "",
permissionLevel: 2, permissionLevel: 1,
}, },
{ {
text: 'Statisztika', text: "Statisztika",
to: '/statistics', to: "/statistics",
prefix: '', prefix: "",
permissionLevel: 3, permissionLevel: 3,
}, },
{ {
text: 'Jelentkezések', text: "Jelentkezések",
to: '/applications', to: "/applications",
prefix: '', prefix: "",
permissionLevel: 3, permissionLevel: 3,
}, },
{ {
text: 'Házi feladatok', text: "Házi feladatok",
to: '/homework', to: "/homework",
prefix: '', prefix: "",
permissionLevel: 2, permissionLevel: 2,
}, },
]; ];
...@@ -97,7 +97,7 @@ class Header extends Component { ...@@ -97,7 +97,7 @@ class Header extends Component {
let maxNum = 0; let maxNum = 0;
if (this.props.user.id) { if (this.props.user.id) {
maxNum = menuItems.filter( maxNum = menuItems.filter(
(item) => this.props.user.permission >= item.permissionLevel (item) => this.props.user.permission >= item.permissionLevel,
).length; ).length;
} else { } else {
maxNum = 3; maxNum = 3;
...@@ -161,7 +161,7 @@ class Header extends Component { ...@@ -161,7 +161,7 @@ class Header extends Component {
{item.prefix} {item.prefix}
{item.text} {item.text}
</Menu.Item> </Menu.Item>
) : null ) : null,
)} )}
</Menu> </Menu>
</Popup> </Popup>
...@@ -173,10 +173,10 @@ class Header extends Component { ...@@ -173,10 +173,10 @@ class Header extends Component {
<Button inverted as={Link} to="/profile"> <Button inverted as={Link} to="/profile">
Profilom Profilom
</Button> </Button>
<Button as="a" href="/api/v1/logout/" icon="sign out" /> <Button as="a" href="/oidc/logout/" icon="sign out" />
</Button.Group> </Button.Group>
) : ( ) : (
<Button as="a" href="/api/v1/login/authsch/" inverted> <Button as="a" href="/oidc/authenticate/" inverted>
Bejelentkezés Bejelentkezés
</Button> </Button>
)} )}
...@@ -247,7 +247,7 @@ class Header extends Component { ...@@ -247,7 +247,7 @@ class Header extends Component {
{item.prefix} {item.prefix}
{item.text} {item.text}
</Menu.Item> </Menu.Item>
) : null ) : null,
)} )}
<Menu.Item> <Menu.Item>
{this.props.user.id ? ( {this.props.user.id ? (
...@@ -263,7 +263,7 @@ class Header extends Component { ...@@ -263,7 +263,7 @@ class Header extends Component {
<Button <Button
onClick={this.handleClose} onClick={this.handleClose}
as="a" as="a"
href="/api/v1/logout/" href="/oidc/logout/"
icon="sign out" icon="sign out"
/> />
</Button.Group> </Button.Group>
...@@ -271,7 +271,7 @@ class Header extends Component { ...@@ -271,7 +271,7 @@ class Header extends Component {
<Button <Button
onClick={this.handleClose} onClick={this.handleClose}
as="a" as="a"
href="/api/v1/login/authsch/" href="/oidc/authenticate/"
inverted inverted
> >
Bejelentkezés Bejelentkezés
......
...@@ -35,6 +35,16 @@ const allowedFileTypes = [ ...@@ -35,6 +35,16 @@ const allowedFileTypes = [
'application/x-zip', 'application/x-zip',
]; ];
const allowedFileEnds = ['.zip', '.jpeg', '.jpg', '.jpe', '.png'];
function validateFileName(fileNameToValidate) {
return (
allowedFileEnds.find((typeName) => {
return fileNameToValidate.toLowerCase().endsWith(typeName);
}).length > 0
);
}
// in megabytes // in megabytes
const maxFileSize = 50; const maxFileSize = 50;
...@@ -211,7 +221,7 @@ class AddSolutionForm extends Component { ...@@ -211,7 +221,7 @@ class AddSolutionForm extends Component {
!description || !description ||
(!file (!file
? false ? false
: !allowedFileTypes.includes(file.type) || : !validateFileName(file.name) ||
file.size > maxFileSize * 1024 ** 2) file.size > maxFileSize * 1024 ** 2)
} }
inverted inverted
...@@ -270,7 +280,7 @@ class AddSolutionForm extends Component { ...@@ -270,7 +280,7 @@ class AddSolutionForm extends Component {
!description || !description ||
(!file (!file
? false ? false
: !allowedFileTypes.includes(file.type) || : !validateFileName(file.name) ||
file.size > maxFileSize * 1024 ** 2) file.size > maxFileSize * 1024 ** 2)
} }
onClick={() => { onClick={() => {
......
...@@ -8,24 +8,24 @@ import { ...@@ -8,24 +8,24 @@ import {
Item, Item,
Segment, Segment,
Table, Table,
} from 'semantic-ui-react'; } from "semantic-ui-react";
import React, { Component } from 'react'; import React, { Component } from "react";
import { import {
clearWrite, clearWrite,
getNotesByEvent, getNotesByEvent,
postEventNote, postEventNote,
writeNote, writeNote,
} from '../../actions/notes'; } from "../../actions/notes";
import { import {
getEventById, getEventById,
getTrainees, getTrainees,
submitVisitors, submitVisitors,
visitorChange, visitorChange,
} from '../../actions/statistics'; } from "../../actions/statistics";
import TraineeTableRow from './EventDetailTableRow'; import TraineeTableRow from "./EventDetailTableRow";
import { connect } from 'react-redux'; import { connect } from "react-redux";
import moment from 'moment'; import moment from "moment";
class EventDetail extends Component { class EventDetail extends Component {
constructor(props) { constructor(props) {
...@@ -43,20 +43,30 @@ class EventDetail extends Component { ...@@ -43,20 +43,30 @@ class EventDetail extends Component {
renderTrainees() { renderTrainees() {
const event = this.props.selectedEvent; const event = this.props.selectedEvent;
return this.props.trainees?.map((item) => { return this.props.trainees
const notes = this.props.eventNotes?.filter( ?.sort(function (a, b) {
(note) => note.profile === item.id var nameA = a.full_name.toLowerCase(),
); nameB = b.full_name.toLowerCase();
return item.role === 'Student' ? ( if (nameA < nameB)
<TraineeTableRow //sort string ascending
selectedEvent={event} return -1;
notes={notes} if (nameA > nameB) return 1;
trainee={item} return 0; //default return value (no sorting)
edit={this.state.edit} })
key={item.id} .map((item) => {
/> const notes = this.props.eventNotes?.filter(
) : null; (note) => note.profile === item.id
}); );
return item.role === "Student" ? (
<TraineeTableRow
selectedEvent={event}
notes={notes}
trainee={item}
edit={this.state.edit}
key={item.id}
/>
) : null;
});
} }
renderEvent() { renderEvent() {
...@@ -64,11 +74,11 @@ class EventDetail extends Component { ...@@ -64,11 +74,11 @@ class EventDetail extends Component {
return ( return (
<Segment> <Segment>
<Item> <Item>
<Divider style={{ fontSize: '2em' }} horizontal> <Divider style={{ fontSize: "2em" }} horizontal>
<Header as="h1"> <Header as="h1">
{name} {name}
<Item.Header style={{ fontSize: '0.6em' }}> <Item.Header style={{ fontSize: "0.6em" }}>
{moment(date).format('LL')} {moment(date).format("LL")}
</Item.Header> </Item.Header>
</Header> </Header>
</Divider> </Divider>
...@@ -91,7 +101,7 @@ class EventDetail extends Component { ...@@ -91,7 +101,7 @@ class EventDetail extends Component {
<Comment.Content> <Comment.Content>
<Comment.Author>{note.created_by_name}</Comment.Author> <Comment.Author>{note.created_by_name}</Comment.Author>
<Comment.Metadata> <Comment.Metadata>
{moment(note.created_at).format('LL')} {moment(note.created_at).format("LL")}
</Comment.Metadata> </Comment.Metadata>
<Comment.Text>{note.note}</Comment.Text> <Comment.Text>{note.note}</Comment.Text>
</Comment.Content> </Comment.Content>
...@@ -99,7 +109,7 @@ class EventDetail extends Component { ...@@ -99,7 +109,7 @@ class EventDetail extends Component {
</Segment> </Segment>
); );
} }
return ''; return "";
}); });
} }
...@@ -107,24 +117,12 @@ class EventDetail extends Component { ...@@ -107,24 +117,12 @@ class EventDetail extends Component {
const event = this.props.selectedEvent; const event = this.props.selectedEvent;
const note = this.props.actualNote; const note = this.props.actualNote;
return ( return (
<Container style={{ paddingTop: '1em', paddingBottom: '7em' }}> <Container style={{ paddingTop: "1em", paddingBottom: "7em" }}>
<Container textAlign="center"> <Container textAlign="center">
{this.props.selectedEvent && this.props.trainees {this.props.selectedEvent && this.props.trainees
? this.renderEvent() ? this.renderEvent()
: ''} : ""}
</Container> </Container>
<Table celled unstackable>
<Table.Header>
<Table.Row textAlign="center">
<Table.HeaderCell>Név</Table.HeaderCell>
<Table.HeaderCell>Jelen volt</Table.HeaderCell>
<Table.HeaderCell>Megjegyzések</Table.HeaderCell>
</Table.Row>
</Table.Header>
<Table.Body>
{this.props.selectedEvent ? this.renderTrainees() : null}
</Table.Body>
</Table>
{!this.state.edit ? ( {!this.state.edit ? (
<Button onClick={() => this.setState({ edit: true })}> <Button onClick={() => this.setState({ edit: true })}>
Módosítás Módosítás
...@@ -133,16 +131,27 @@ class EventDetail extends Component { ...@@ -133,16 +131,27 @@ class EventDetail extends Component {
<Button <Button
onClick={() => { onClick={() => {
this.setState({ edit: false }); this.setState({ edit: false });
this.props.submitVisitors(this.props.selectedEvent);
}} }}
> >
{' '} {" "}
Kész Kész
</Button> </Button>
)} )}
<Table celled unstackable>
<Table.Header>
<Table.Row textAlign="center">
<Table.HeaderCell>Név</Table.HeaderCell>
<Table.HeaderCell>Jelen volt</Table.HeaderCell>
<Table.HeaderCell>Megjegyzések</Table.HeaderCell>
</Table.Row>
</Table.Header>
<Table.Body>
{this.props.selectedEvent ? this.renderTrainees() : null}
</Table.Body>
</Table>
<Comment.Group> <Comment.Group>
<Header dividing>Megjegyzések</Header> <Header dividing>Megjegyzések</Header>
{this.props.eventNotes ? this.renderComments() : ''} {this.props.eventNotes ? this.renderComments() : ""}
<Form reply> <Form reply>
<Form.TextArea <Form.TextArea
value={note.note} value={note.note}
......
...@@ -9,3 +9,29 @@ ...@@ -9,3 +9,29 @@
text-shadow: black 0px 0px 10px, black 0px 0px 6px; text-shadow: black 0px 0px 10px, black 0px 0px 6px;
-webkit-text-fill-color: white; -webkit-text-fill-color: white;
} }
.quote {
position: relative;
margin-bottom: 0.5rem;
}
.quote:before {
content: '“';
position: absolute;
left: -0.45em;
}
.quote::after {
content: '”';
margin-right: -1rem;
}
.quote--container {
margin: 2rem auto 0;
padding-bottom: 0.7rem;
}
.quote--author {
text-align: right;
font-weight: 300;
}
import './Home.css'; import "./Home.css";
import { import {
Button, Button,
...@@ -9,15 +9,15 @@ import { ...@@ -9,15 +9,15 @@ import {
Image, Image,
Responsive, Responsive,
Segment, Segment,
} from 'semantic-ui-react'; } from "semantic-ui-react";
/* eslint-disable react/jsx-props-no-spreading */ /* eslint-disable react/jsx-props-no-spreading */
import React, { Component } from 'react'; import React, { Component } from "react";
import KSZKbiglogo from '../images/kszk_with_shadow.png'; import KSZKbiglogo from "../images/kszk_with_shadow.png";
import { Link } from 'react-router-dom'; import { Link } from "react-router-dom";
import Slider from 'react-slick'; import Slider from "react-slick";
import { connect } from 'react-redux'; import { connect } from "react-redux";
import { getImages } from '../../actions/home'; import { getImages } from "../../actions/home";
const settings = { const settings = {
dots: false, dots: false,
...@@ -42,12 +42,14 @@ class Home extends Component { ...@@ -42,12 +42,14 @@ class Home extends Component {
if (view === 0) { if (view === 0) {
return ( return (
<div> <div>
{!!this.props.images}
<Slider {...settings}> <Slider {...settings}>
{this.props.images.map((image) => ( {this.props.images &&
<div key={image}> this.props.images.map((image) => (
<img src={image.image} width={imageWidth} alt="" /> <div key={image}>
</div> <img src={image.image} width={imageWidth} alt="" />
))} </div>
))}
</Slider> </Slider>
<div className="car-text-kszk"> <div className="car-text-kszk">
<Segment textAlign="center" vertical> <Segment textAlign="center" vertical>
...@@ -56,8 +58,8 @@ class Home extends Component { ...@@ -56,8 +58,8 @@ class Home extends Component {
content="Üdvözlünk a" content="Üdvözlünk a"
inverted inverted
style={{ style={{
fontSize: '3vw', fontSize: "3vw",
fontWeight: 'normal', fontWeight: "normal",
marginBottom: 0, marginBottom: 0,
}} }}
/> />
...@@ -66,10 +68,10 @@ class Home extends Component { ...@@ -66,10 +68,10 @@ class Home extends Component {
content="Kollégiumi Számítástechnikai Kör" content="Kollégiumi Számítástechnikai Kör"
inverted inverted
style={{ style={{
fontSize: '3.5vw', fontSize: "3.5vw",
fontWeight: 'bold', fontWeight: "bold",
marginBottom: '0.5vw', marginBottom: "0.5vw",
marginTop: '0.5vw', marginTop: "0.5vw",
}} }}
/> />
<Header <Header
...@@ -77,57 +79,57 @@ class Home extends Component { ...@@ -77,57 +79,57 @@ class Home extends Component {
content="újoncképzésének weboldalán!" content="újoncképzésének weboldalán!"
inverted inverted
style={{ style={{
fontSize: '3vw', fontSize: "3vw",
fontWeight: 'normal', fontWeight: "normal",
marginBottom: 0, marginBottom: 0,
marginTop: '0.5vw', marginTop: "0.5vw",
}} }}
/> />
<Image <Image
verticalAlign="middle" verticalAlign="middle"
src={KSZKbiglogo} src={KSZKbiglogo}
style={{ marginTop: '1vw', width: '17%' }} style={{ marginTop: "1vw", width: "17%" }}
/> />
<Header <Header
as="h1" as="h1"
content="Szeretettel várunk a KSZKépzésre!" content="Szeretettel várunk a KSZKépzésre!"
inverted inverted
style={{ style={{
fontSize: '3vw', fontSize: "3vw",
fontWeight: 'normal', fontWeight: "normal",
marginBottom: 0, marginBottom: 0,
marginTop: '1vw', marginTop: "1vw",
}} }}
/> />
<Container> <Container>
{this.props.user.id ? ( {this.props.user.id ? (
<Button <Button
as={Link} as={Link}
to="/profile" to="/profile"
primary primary
size="huge" size="huge"
style={{ style={{
fontSize: '2vw', fontSize: "2vw",
marginTop: '1vw', marginTop: "1vw",
marginBottom: '1vw', marginBottom: "1vw",
fontWeight: 'bold', fontWeight: "bold",
letterSpacing: '0.13vw', letterSpacing: "0.13vw",
}} }}
> >
Jelentkezés Jelentkezés
<Icon name="right arrow" /> <Icon name="right arrow" />
</Button> </Button>
) : ( ) : (
<Button <Button
href="/api/v1/login/authsch/" href="/oidc/authenticate/"
primary primary
size="huge" size="huge"
style={{ style={{
fontSize: '2vw', fontSize: "2vw",
marginTop: '1vw', marginTop: "1vw",
marginBottom: '1vw', marginBottom: "1vw",
fontWeight: 'bold', fontWeight: "bold",
letterSpacing: '0.13vw', letterSpacing: "0.13vw",
}} }}
> >
Bejelentkezés Bejelentkezés
...@@ -157,8 +159,8 @@ class Home extends Component { ...@@ -157,8 +159,8 @@ class Home extends Component {
content="Üdvözlünk a" content="Üdvözlünk a"
inverted inverted
style={{ style={{
fontSize: '5vw', fontSize: "5vw",
fontWeight: 'bold', fontWeight: "bold",
marginBottom: 0, marginBottom: 0,
}} }}
/> />
...@@ -167,10 +169,10 @@ class Home extends Component { ...@@ -167,10 +169,10 @@ class Home extends Component {
content="Kollégiumi Számítástechnikai Kör" content="Kollégiumi Számítástechnikai Kör"
inverted inverted
style={{ style={{
fontSize: '6vw', fontSize: "6vw",
fontWeight: 'bold', fontWeight: "bold",
marginBottom: '0.5vw', marginBottom: "0.5vw",
marginTop: '0.5vw', marginTop: "0.5vw",
}} }}
/> />
<Header <Header
...@@ -178,27 +180,27 @@ class Home extends Component { ...@@ -178,27 +180,27 @@ class Home extends Component {
content="újoncképzésének weboldalán!" content="újoncképzésének weboldalán!"
inverted inverted
style={{ style={{
fontSize: '5vw', fontSize: "5vw",
fontWeight: 'bold', fontWeight: "bold",
marginBottom: 0, marginBottom: 0,
marginTop: '0.5vw', marginTop: "0.5vw",
}} }}
/> />
<Image <Image
className="kszklogo" className="kszklogo"
verticalAlign="middle" verticalAlign="middle"
src={KSZKbiglogo} src={KSZKbiglogo}
style={{ marginTop: '1vw', width: '20%' }} style={{ marginTop: "1vw", width: "20%" }}
/> />
<Header <Header
as="h1" as="h1"
content="Szeretettel várunk a KSZKépzésre!" content="Szeretettel várunk a KSZKépzésre!"
inverted inverted
style={{ style={{
fontSize: '5vw', fontSize: "5vw",
fontWeight: 'bold', fontWeight: "bold",
marginBottom: 0, marginBottom: 0,
marginTop: '1vw', marginTop: "1vw",
}} }}
/> />
<Container> <Container>
...@@ -209,11 +211,11 @@ class Home extends Component { ...@@ -209,11 +211,11 @@ class Home extends Component {
primary primary
size="massive" size="massive"
style={{ style={{
fontSize: '4vw', fontSize: "4vw",
marginTop: '1.5vw', marginTop: "1.5vw",
marginBottom: '1vw', marginBottom: "1vw",
fontWeight: 'bold', fontWeight: "bold",
letterSpacing: '0.15vw', letterSpacing: "0.15vw",
}} }}
> >
Jelentkezés Jelentkezés
...@@ -221,15 +223,15 @@ class Home extends Component { ...@@ -221,15 +223,15 @@ class Home extends Component {
</Button> </Button>
) : ( ) : (
<Button <Button
href="/api/v1/login/authsch/" href="/oidc/authenticate/"
primary primary
size="massive" size="massive"
style={{ style={{
fontSize: '4vw', fontSize: "4vw",
marginTop: '1vw', marginTop: "1vw",
marginBottom: '1vw', marginBottom: "1vw",
fontWeight: 'bold', fontWeight: "bold",
letterSpacing: '0.15vw', letterSpacing: "0.15vw",
}} }}
> >
Bejelentkezés Bejelentkezés
...@@ -248,12 +250,29 @@ class Home extends Component { ...@@ -248,12 +250,29 @@ class Home extends Component {
renderText() { renderText() {
const kszk_age = new Date().getFullYear() - 1976; const kszk_age = new Date().getFullYear() - 1976;
return ( return (
<Segment style={{ padding: '8em 0em', fontFamily: 'Arial' }} vertical> <Segment style={{ padding: "1em 0em", fontFamily: "Arial" }} vertical>
<Container text> <Container text>
<Header as="h3" style={{ fontSize: '2em', fontFamily: 'Arial' }}> <Segment inverted color="green" tertiary>
<Header as="h3" style={{ fontSize: "2em", fontFamily: "Arial" }}>
Bemutatkozó videók
</Header>
<p style={{ fontSize: "1.33em", fontFamily: "Arial" }}>
A gólyakörtére készített videóinkat megnézhetitek a{" "}
<a
href="https://www.youtube.com/@kollegiumiszamitastechnika470/videos"
target="_blank"
rel="noopener noreferrer"
style={{ color: "white", textDecoration: "underline" }}
>
YouTube csatornánkon
</a>
!
</p>
</Segment>
<Header as="h3" style={{ fontSize: "2em", fontFamily: "Arial" }}>
Kik is vagyunk mi? Kik is vagyunk mi?
</Header> </Header>
<p style={{ fontSize: '1.33em', fontFamily: 'Arial' }}> <p style={{ fontSize: "1.33em", fontFamily: "Arial" }}>
A Kollégiumi Számítástechnikai Kör az Egyetem legrégebben működő és A Kollégiumi Számítástechnikai Kör az Egyetem legrégebben működő és
legnagyobb aktív, informatikával foglalkozó öntevékeny legnagyobb aktív, informatikával foglalkozó öntevékeny
csoportosulása, idén ünnepeljük {kszk_age}. születésnapunkat. A csoportosulása, idén ünnepeljük {kszk_age}. születésnapunkat. A
...@@ -265,11 +284,11 @@ class Home extends Component { ...@@ -265,11 +284,11 @@ class Home extends Component {
<Button as={Link} size="large" to="/groups"> <Button as={Link} size="large" to="/groups">
Ismerd meg a köreinket! <Icon name="right arrow" /> Ismerd meg a köreinket! <Icon name="right arrow" />
</Button> </Button>
<Divider as="h4" className="header" style={{ margin: '3em 0em' }} /> <Divider as="h4" className="header" style={{ margin: "3em 0em" }} />
<Header as="h3" style={{ fontSize: '2em', fontFamily: 'Arial' }}> <Header as="h3" style={{ fontSize: "2em", fontFamily: "Arial" }}>
Lehetőségek Lehetőségek
</Header> </Header>
<p style={{ fontSize: '1.33em', fontFamily: 'Arial' }}> <p style={{ fontSize: "1.33em", fontFamily: "Arial" }}>
A KSZK a lehetőségek tárháza, a hely ahol Te leendő mérnök A KSZK a lehetőségek tárháza, a hely ahol Te leendő mérnök
minden területen kipróbálhatod, továbbképezheted magad. Nálunk minden területen kipróbálhatod, továbbképezheted magad. Nálunk
kibontakoztathatod kreativitásod, tapasztalatot, mérnöki szemléletet kibontakoztathatod kreativitásod, tapasztalatot, mérnöki szemléletet
...@@ -279,34 +298,92 @@ class Home extends Component { ...@@ -279,34 +298,92 @@ class Home extends Component {
szakma egy-egy meghatározó területével foglalkoznak a fejlesztés és szakma egy-egy meghatározó területével foglalkoznak a fejlesztés és
üzemeltetés területén. üzemeltetés területén.
</p> </p>
<Divider as="h4" className="header" style={{ margin: '3em 0em' }} /> <Divider as="h4" className="header" style={{ margin: "3em 0em" }} />
<Header as="h3" style={{ fontSize: '2em', fontFamily: 'Arial' }}> <Header as="h3" style={{ fontSize: "2em", fontFamily: "Arial" }}>
Miért KSZK-snak lenni?
</Header>
<div
class="quote--container"
style={{ fontSize: "1.5em", fontFamily: "Arial" }}
>
<p class="quote">
Szerintem KSZK-snak lenni, mert rengeteget tanulok belőle.
Gyakorlok, hallok újdonságokat, kipróbálhatom magam mindenféle
szerepben, és közben még barátokat is szerzek. Ezek a barátságok,
tapasztalatok egyébként később is nagyon jól jönnek, például a
CV-mben egész erős fegyvertény, hogy ennyi mindent csináltam.
Tényleg rengeteget kaptam a reszorttól, szakmailag és emberileg
is. Ja, és szeretem, hogy a KSZK ilyen szabad, és abba kóstolok
bele, amibe akarok.
</p>
<p class="quote--author">&ndash; Feri</p>
</div>
<div
class="quote--container"
style={{ fontSize: "1.5em", fontFamily: "Arial" }}
>
<p class="quote">
A nulláról kezdtem a képzést és az egyetemi tanulmányaimat is,
semmilyen infós tudásom nem volt, de rengeteget fejlődtem a
KSZK-nak köszönhetően. Ezenkívül nem csak szakmai tudást
szereztem, hanem egy fantasztikus közösség részévé is váltam.
</p>
<p class="quote--author">&ndash; Patrik</p>
</div>
<div
class="quote--container"
style={{ fontSize: "1.5em", fontFamily: "Arial" }}
>
<p class="quote">
Amikor idejöttem egyetemre nem tudtam, hogy mennyire fogom
megtalálni a helyem. Aztán, elkezdtem megismerkedni a kari
közösséggel és barátokat szereztem, akik jelentős részét a
KSZK-ban ismertem meg, vagy velem csatlakozott ide. Együtt
foglalkozgatunk projektekkel, a Ház rendszereinek üzemeltetésével
és egyéb nagyon érdekes ügyes-bajos dolgokkal. Úgy érzem, hogy a
KSZK-ban igazán megtaláltam a helyem, mind emberileg, mind
szakmailag.
</p>
<p class="quote--author">&ndash; Mike</p>
</div>
<div
class="quote--container"
style={{ fontSize: "1.5em", fontFamily: "Arial" }}
>
<p class="quote">
Számtalan dologgal foglalkozunk, és tényleg azt csinálhatom, ami
csak érdekel. Emellett a KSZK-t a szívügyemnek tekintem, szerintem
a legjobb lehetőség a szakmai fejlődésen kívül életre szóló
barátságok alakítására.
</p>
<p class="quote--author">&ndash; Blint</p>
</div>
<Divider as="h4" className="header" style={{ margin: "3em 0em" }} />
<Header as="h3" style={{ fontSize: "2em", fontFamily: "Arial" }}>
Képzésünk Képzésünk
</Header> </Header>
<p style={{ fontSize: '1.33em', fontFamily: 'Arial' }}> <p style={{ fontSize: "1.33em", fontFamily: "Arial" }}>
Kilenc alkalmas képzésünk végén Te is igazi KSZK-ssá válhatsz, Képzésünk végén Te is igazi KSZK-ssá válhatsz, hiszen rengeteg
hiszen rengeteg szakmai tudást igyekszünk átadni nektek. A szakmai tudást igyekszünk átadni nektek. A képzésalkalmak rendkívül
képzésalkalmak rendkívül hangulatban telnek, és a szociális hangulatban telnek, és a szociális irányultságú foglalkozások
irányultságú foglalkozások alatt egy nagyon csapat kovácsolódik alatt egy nagyon csapat kovácsolódik az érdeklődőkből. Az első
az érdeklődőkből. Az első képzés időpontja február 16. vasárnap képzés időpontja február 20. csütörtök 18:00, ettől kezdve pedig
18:00, ettől kezdve pedig minden héten találkozunk ugyanabban az minden héten egy közösségi és számos szakmai alkalom során
időpontban. A képzés ideje alatt április 17-19 között rendezünk találkozunk. A képzésalkalmak után április 11-től 13-ig rendezünk
tábort. Az alkalmakon és a táboron kötelező a részvétel. tábort. Az közösségi alkalmakon és a táboron kötelező a részvétel.
</p> </p>
<Divider as="h4" className="header" style={{ margin: '3em 0em' }} /> <Divider as="h4" className="header" style={{ margin: "3em 0em" }} />
<Segment inverted color="red" tertiary> <Segment inverted color="red" tertiary>
<Header as="h3" style={{ fontSize: '2em', fontFamily: 'Arial' }}> <Header as="h3" style={{ fontSize: "2em", fontFamily: "Arial" }}>
Korlátos férőhely Korlátos férőhely
</Header> </Header>
<p style={{ fontSize: '1.33em', fontFamily: 'Arial' }}> <p style={{ fontSize: "1.33em", fontFamily: "Arial" }}>
Általánosságban elmondható, hogy a KSZK tagjai rengeteg dologgal Általánosságban elmondható, hogy a KSZK tagjai rengeteg dologgal
foglalkoznak a hétköznapjaik során, hogy minden informatikai foglalkoznak a hétköznapjaik során, hogy minden informatikai
rendszer úgy működjön a kollégiumban, ahogy kell. Így van ez rendszer úgy működjön a kollégiumban, ahogy kell. Így van ez
velünk képzőkkel is, emiatt hetente csak egy képzésalkalmat tudunk velünk képzőkkel is, emiatt a férőhelyek korlátosak.
tartani. Mivel az oktatóterem férőhelyében korlátozott, ezért a
képzésre maximum 35 embert tudunk befogadni.
</p> </p>
<p style={{ fontSize: '1.33em', fontFamily: 'Arial' }}> <p style={{ fontSize: "1.33em", fontFamily: "Arial" }}>
Sajnos előfordulhat olyan eset, hogy valaki már nem fér be a Sajnos előfordulhat olyan eset, hogy valaki már nem fér be a
képzésre, ezért kérünk titeket, hogy ennek tudatában képzésre, ezért kérünk titeket, hogy ennek tudatában
jelentkezzetek majd. Ilyen esetben reméljük ez nem szegi jelentkezzetek majd. Ilyen esetben reméljük ez nem szegi
...@@ -324,12 +401,12 @@ class Home extends Component { ...@@ -324,12 +401,12 @@ class Home extends Component {
<Responsive minWidth={600}> <Responsive minWidth={600}>
<div className="car-image-kszk"> <div className="car-image-kszk">
<div /> <div />
{this.renderSlider(0, '120%')} {this.renderSlider(0, "120%")}
</div> </div>
{this.renderText()} {this.renderText()}
</Responsive> </Responsive>
<Responsive maxWidth={600}> <Responsive maxWidth={600}>
<div className="car-image-kszk">{this.renderSlider(1, '200%')}</div> <div className="car-image-kszk">{this.renderSlider(1, "200%")}</div>
{this.renderText()} {this.renderText()}
</Responsive> </Responsive>
</div> </div>
......
...@@ -14,9 +14,8 @@ class LeaderBoard extends Component { ...@@ -14,9 +14,8 @@ class LeaderBoard extends Component {
return this.props.trainees return this.props.trainees
.sort( .sort(
(a, b) => (a, b) =>
Number(b.homework_bits) + (Number(b.homework_bits) + Number(b.events_visited) + Number(b.extra_bits)) -
b.events_visited - (Number(a.homework_bits) + Number(a.events_visited) + Number(a.extra_bits))
(Number(a.homework_bits) + a.events_visited)
) )
.map((trainee) => .map((trainee) =>
trainee.role === 'Student' ? ( trainee.role === 'Student' ? (
...@@ -24,10 +23,10 @@ class LeaderBoard extends Component { ...@@ -24,10 +23,10 @@ class LeaderBoard extends Component {
<Table.Cell textAlign="center">{trainee.full_name}</Table.Cell> <Table.Cell textAlign="center">{trainee.full_name}</Table.Cell>
<Table.Cell textAlign="center">{trainee.events_visited}</Table.Cell> <Table.Cell textAlign="center">{trainee.events_visited}</Table.Cell>
<Table.Cell textAlign="center"> <Table.Cell textAlign="center">
{Number(trainee.homework_bits)} {Number(trainee.homework_bits) + Number(trainee.extra_bits)}
</Table.Cell> </Table.Cell>
<Table.Cell textAlign="center"> <Table.Cell textAlign="center">
{Number(trainee.homework_bits) + trainee.events_visited} {Number(trainee.homework_bits) + trainee.events_visited + Number(trainee.extra_bits)}
</Table.Cell> </Table.Cell>
</Table.Row> </Table.Row>
) : null ) : null
......
...@@ -31,7 +31,7 @@ class Mentors extends Component { ...@@ -31,7 +31,7 @@ class Mentors extends Component {
<Item.Content style={{ padding: '1rem' }}> <Item.Content style={{ padding: '1rem' }}>
<Item.Header>{item.name}</Item.Header> <Item.Header>{item.name}</Item.Header>
<Item.Description> <Item.Description>
<p>{item.text}</p> <p dangerouslySetInnerHTML={{ __html: item.text }}></p>
</Item.Description> </Item.Description>
<Item.Extra> <Item.Extra>
<Label> <Label>
...@@ -56,7 +56,9 @@ class Mentors extends Component { ...@@ -56,7 +56,9 @@ class Mentors extends Component {
<Image src={item.image} wrapped ui={false} /> <Image src={item.image} wrapped ui={false} />
<Card.Content> <Card.Content>
<Card.Header>{item.name}</Card.Header> <Card.Header>{item.name}</Card.Header>
<Card.Description>{item.text}</Card.Description> <Card.Description>
<p dangerouslySetInnerHTML={{ __html: item.text }}></p>
</Card.Description>
</Card.Content> </Card.Content>
<Card.Content extra> <Card.Content extra>
<Label> <Label>
......
...@@ -10,6 +10,19 @@ import EditNewsForm from '../forms/EditNewsForm'; ...@@ -10,6 +10,19 @@ import EditNewsForm from '../forms/EditNewsForm';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import moment from 'moment'; import moment from 'moment';
const linkify = (text) => {
const urlRegex = /(https?:\/\/[^\s]+)/g;
return text.split(urlRegex).map((part, index) =>
part.match(urlRegex) ? (
<a key={index} href={part} target="_blank" rel="noopener noreferrer">
{part}
</a>
) : (
part
)
);
};
class News extends Component { class News extends Component {
UNSAFE_componentWillMount() { UNSAFE_componentWillMount() {
this.props.getNews(); this.props.getNews();
...@@ -61,7 +74,7 @@ class News extends Component { ...@@ -61,7 +74,7 @@ class News extends Component {
renderMultiLine = (text) => { renderMultiLine = (text) => {
const strings = text.split('\n'); const strings = text.split('\n');
return strings.map((string) => <p key={Math.random()}>{string}</p>); return strings.map((string) => <p key={Math.random()}>{linkify(string)}</p>);
}; };
render() { render() {
......
import { Container, Divider, Dropdown, Form, Segment } from 'semantic-ui-react'; import { Container, Divider, Dropdown, Form, Segment } from "semantic-ui-react";
import React, { Component } from 'react'; import React, { Component } from "react";
import { groupChange, submitRegistration, textChange } from '../../actions'; import { groupChange, submitRegistration, textChange } from "../../actions";
import HiddenForm from '../forms/HiddenForm'; import HiddenForm from "../forms/HiddenForm";
import { connect } from 'react-redux'; import { connect } from "react-redux";
import { getDeadline } from '../../actions/auth'; import { getDeadline } from "../../actions/auth";
const options = [ const options = [
{ key: 'DT', text: 'DevTeam', value: 'DT' }, { key: "DT", text: "DevTeam", value: "DT" },
{ key: 'NET', text: 'NETeam', value: 'NET' }, { key: "NET", text: "NETeam", value: "NET" },
{ key: 'ST', text: 'SecurITeam', value: 'ST' }, { key: "ST", text: "SecurITeam", value: "ST" },
{ key: 'SYS', text: 'SysAdmin', value: 'SYS' }, { key: "SYS", text: "SysAdmin", value: "SYS" },
{ key: 'HAT', text: 'Hallgatói Tudásbázis', value: 'HAT' }, { key: "HAT", text: "Hallgatói Tudásbázis", value: "HAT" },
]; ];
class Profile extends Component { class Profile extends Component {
UNSAFE_componentWillMount() { UNSAFE_componentWillMount() {
this.props.getDeadline(); this.props.getDeadline();
if (!this.props.id) { if (!this.props.id) {
this.props.history.push('/home'); this.props.history.push("/home");
} }
} }
...@@ -40,20 +40,20 @@ class Profile extends Component { ...@@ -40,20 +40,20 @@ class Profile extends Component {
return ( return (
<Container <Container
style={{ style={{
marginTop: '1em', marginTop: "1em",
}} }}
> >
{canEdit ? ( {canEdit ? (
<Segment inverted color="red" tertiary> <Segment inverted color="red" tertiary>
<p <p
style={{ fontSize: '1.3em' }} style={{ fontSize: "1.3em" }}
dangerouslySetInnerHTML={{ __html: messageBefore }} dangerouslySetInnerHTML={{ __html: messageBefore }}
/> />
</Segment> </Segment>
) : ( ) : (
<Segment inverted color="red" tertiary> <Segment inverted color="red" tertiary>
<p <p
style={{ fontSize: '1.3em' }} style={{ fontSize: "1.3em" }}
dangerouslySetInnerHTML={{ __html: messageAfter }} dangerouslySetInnerHTML={{ __html: messageAfter }}
/> />
</Segment> </Segment>
...@@ -134,29 +134,30 @@ class Profile extends Component { ...@@ -134,29 +134,30 @@ class Profile extends Component {
</li> </li>
<br /> <br />
<li> <li>
Két előadás közti szünetben úgy döntesz, hogy laptopoddal Kicsit hosszúra nyúlt az előadás és lassan rohannod kell
az index.hu tech cikkeit fogod görgetni. Ám az oldal nem haza, ezért úgy döntesz, hogy megnézed a menetrendet a
válaszol, a hiba okát megpróbálod kideríteni. Ekkor veszed menetrendek.hu weboldalon. Ám az oldal nem válaszol, a
észre, hogy az alábbiakat sem éred el: sze.hu, 444.hu, hiba okát megpróbálod kideríteni. Ekkor veszed észre, hogy
corvinus.hu, startlap.hu. Ugyanakkor a Facebook, a Gmail, az alábbiakat sem éred el: sze.hu, corvinus.hu,
a YouTube, de még az egyetemi oldalak többsége is működik. startlap.hu. Ugyanakkor a Facebook, a Gmail, a YouTube, de
Szerinted mi lehet a hiba oka? még az egyetemi oldalak többsége is működik. Szerinted mi
lehet a hiba oka?
</li> </li>
<br /> <br />
<li> <li>
Találsz egy értelmetlen szöveget egy honlapon (például:{' '} Találsz egy értelmetlen szöveget egy honlapon (például:{" "}
<a href="https://ujonc.kszk.bme.hu/zebra.html"> <a href="https://ujonc.kszk.bme.hu/kepzes-media/public/zebra.html">
https://ujonc.kszk.bme.hu/zebra.html https://ujonc.kszk.bme.hu/kepzes-media/public/zebra.html
</a> </a>
), de feltűnik, hogy két egyenlőségjellel fejeződik be. ), de feltűnik, hogy egyenlőségjellel fejeződik be.
Nyomozz, s a végeredményt (amit találtál) írd ide! Nyomozz, s a végeredményt (amit találtál) írd ide!
</li> </li>
<br /> <br />
<li> <li>
A <b>ujonc.kszk.bme.hu</b> címen elérhető gépen fut egy A <b>ujonc-gres.kszk.bme.hu</b> címen elérhető gépen fut
szolgáltatás az alapértelmezett <b>5432</b> porton egy szolgáltatás az alapértelmezett <b>5432</b> porton
(használd az előző feladatban kapott adatokat). Belépés (használd az előző feladatban kapott adatokat). Belépés
után keresd meg a feladat megoldását! után írd le mit találtál!
</li> </li>
</ul> </ul>
</div> </div>
...@@ -184,26 +185,30 @@ class Profile extends Component { ...@@ -184,26 +185,30 @@ class Profile extends Component {
címsorába írva eléred a kiszolgáló webszervert. Mi lehet a címsorába írva eléred a kiszolgáló webszervert. Mi lehet a
baj? baj?
</li> </li>
<br />
<li> <li>
Két előadás közti szünetben úgy döntesz, hogy laptopoddal Kicsit hosszúra nyúlt az előadás és lassan rohannod kell
az index.hu tech cikkeit fogod görgetni. Ám az oldal nem haza, ezért úgy döntesz, hogy megnézed a menetrendet a
válaszol, a hiba okát megpróbálod kideríteni. Ekkor veszed menetrendek.hu weboldalon. Ám az oldal nem válaszol, a
észre, hogy az alábbiakat sem éred el: sze.hu, 444.hu, hiba okát megpróbálod kideríteni. Ekkor veszed észre, hogy
corvinus.hu, startlap.hu. Ugyanakkor a Facebook, a Gmail, az alábbiakat sem éred el: sze.hu, corvinus.hu,
a YouTube, de még az egyetemi oldalak többsége is működik. startlap.hu. Ugyanakkor a Facebook, a Gmail, a YouTube, de
Szerinted mi lehet a hiba oka? még az egyetemi oldalak többsége is működik. Szerinted mi
lehet a hiba oka?
</li> </li>
<br />
<li> <li>
Találsz egy értelmetlen szöveget egy honlapon (például:{' '} Találsz egy értelmetlen szöveget egy honlapon (például:{" "}
<a href="https://ujonc.kszk.bme.hu/zebra.html"> <a href="https://ujonc.kszk.bme.hu/kepzes-media/public/zebra.html">
https://ujonc.kszk.bme.hu/zebra.html https://ujonc.kszk.bme.hu/kepzes-media/public/zebra.html
</a> </a>
), de feltűnik, hogy két egyenlőségjellel fejeződik be. ), de feltűnik, hogy egyenlőségjellel fejeződik be.
Nyomozz, s a végeredményt (amit találtál) írd ide! Nyomozz, s a végeredményt (amit találtál) írd ide!
</li> </li>
<br />
<li> <li>
A <b>ujonc.kszk.bme.hu</b> címen elérhető gépen fut egy A <b>ujonc-gres.kszk.bme.hu</b> címen elérhető gépen fut
szolgáltatás az alapértelmezett <b>5432</b> porton egy szolgáltatás az alapértelmezett <b>5432</b> porton
(használd az előző feladatban kapott adatokat). Belépés (használd az előző feladatban kapott adatokat). Belépés
után keresd meg a feladat megoldását! után keresd meg a feladat megoldását!
</li> </li>
...@@ -214,7 +219,7 @@ class Profile extends Component { ...@@ -214,7 +219,7 @@ class Profile extends Component {
/> />
)} )}
<Divider horizontal>Érdekelődés</Divider> <Divider horizontal>Érdeklődés</Divider>
<Dropdown <Dropdown
fluid fluid
multiple multiple
...@@ -236,12 +241,12 @@ class Profile extends Component { ...@@ -236,12 +241,12 @@ class Profile extends Component {
} }
checked={signed} checked={signed}
readOnly={!canEdit} readOnly={!canEdit}
style={!canEdit ? { marginBottom: '5em' } : null} style={!canEdit ? { marginBottom: "5em" } : null}
/> />
{canEdit ? ( {canEdit ? (
<Form.Button <Form.Button
primary primary
style={{ marginBottom: '5em' }} style={{ marginBottom: "5em" }}
disabled={!signed} disabled={!signed}
onClick={() => onClick={() =>
this.props.submitRegistration({ this.props.submitRegistration({
...@@ -258,7 +263,7 @@ class Profile extends Component { ...@@ -258,7 +263,7 @@ class Profile extends Component {
Mentés Mentés
</Form.Button> </Form.Button>
) : ( ) : (
'' ""
)} )}
</Form> </Form>
</Container> </Container>
......