Update to maintainer version
parent
5cd558eb6c
commit
13c0db3539
@ -1,2 +1 @@
|
||||
# Ignore the dev_files directory
|
||||
_NEW
|
||||
._*
|
@ -1,2 +1,7 @@
|
||||
# web-learning-manager
|
||||
# Netcloud Learning Manager
|
||||
|
||||
The Netcloud learning manager is a webtool, which was developed for all employees of the company Netcloud AG, in order to educate themselves independently and personally with licensed videos from LinkedIn Learning and the Linuxacademy.
|
||||
|
||||
The application can be accessed at the following URL: https://learning-manager.apps.netcloud.local/
|
||||
|
||||
The password is in our internal wiki.
|
@ -0,0 +1,306 @@
|
||||
*,
|
||||
*:before,
|
||||
*:after {
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
html,
|
||||
body {
|
||||
font-size: 62.5%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
|
||||
html,
|
||||
body {
|
||||
font-size: 50%;
|
||||
}
|
||||
}
|
||||
|
||||
svg {
|
||||
display: inline-block;
|
||||
width: 2rem;
|
||||
height: 2rem;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
.svg-icon {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.svg-icon path {
|
||||
stroke: rgba(255, 255, 255, 0.9);
|
||||
fill: none;
|
||||
stroke-width: 1;
|
||||
}
|
||||
|
||||
input,
|
||||
button {
|
||||
outline: none;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.netcloud-logo {
|
||||
background-image: url("../../assets/images/Netcloud-Logo_Weiss.png");
|
||||
width: 104px;
|
||||
height: 60px;
|
||||
background-size: contain;
|
||||
margin-top: 30px;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.container {
|
||||
position: relative;
|
||||
height: 100%;
|
||||
background-image: url("../../assets/images/background.jpg");
|
||||
background-size: cover;
|
||||
overflow: auto;
|
||||
font-family: "Open Sans", Helvetica, Arial, sans-serif;
|
||||
}
|
||||
|
||||
.row {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
margin-left: -15rem;
|
||||
margin-top: -26.5rem;
|
||||
width: 30rem;
|
||||
height: 53rem;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.login {
|
||||
position: relative;
|
||||
height: 100%;
|
||||
background: -webkit-linear-gradient(top, rgba(113, 113, 113, 0.8) 0%, rgba(0, 0, 0, 0.6) 100%);
|
||||
background: linear-gradient(to bottom, rgb(96 121 148 / 80%) 0%, rgb(2 24 47 / 65%) 100%);
|
||||
-webkit-transition: opacity 0.1s, -webkit-transform 0.3s cubic-bezier(0.17, -0.65, 0.665, 1.25);
|
||||
transition: opacity 0.1s, -webkit-transform 0.3s cubic-bezier(0.17, -0.65, 0.665, 1.25);
|
||||
transition: opacity 0.1s, transform 0.3s cubic-bezier(0.17, -0.65, 0.665, 1.25);
|
||||
transition: opacity 0.1s, transform 0.3s cubic-bezier(0.17, -0.65, 0.665, 1.25), -webkit-transform 0.3s cubic-bezier(0.17, -0.65, 0.665, 1.25);
|
||||
-webkit-transform: scale(1);
|
||||
transform: scale(1);
|
||||
}
|
||||
|
||||
.login.inactive {
|
||||
opacity: 0;
|
||||
-webkit-transform: scale(1.1);
|
||||
transform: scale(1.1);
|
||||
}
|
||||
|
||||
.login__lock {
|
||||
position: absolute;
|
||||
/*top: 8rem;*/
|
||||
left: 10rem;
|
||||
width: 14rem;
|
||||
height: 2.8rem;
|
||||
font-size: 128px;
|
||||
|
||||
}
|
||||
|
||||
@media screen and (min-width: 769px) {
|
||||
.login__lock {
|
||||
font-size: 152px;
|
||||
}
|
||||
}
|
||||
|
||||
.login__check {
|
||||
position: absolute;
|
||||
top: 16rem;
|
||||
left: 13.5rem;
|
||||
width: 14rem;
|
||||
height: 2.8rem;
|
||||
background: #fff;
|
||||
-webkit-transform-origin: 0 100%;
|
||||
transform-origin: 0 100%;
|
||||
-webkit-transform: rotate(-45deg);
|
||||
transform: rotate(-45deg);
|
||||
}
|
||||
|
||||
.login__check:before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: 0;
|
||||
bottom: 100%;
|
||||
width: 2.8rem;
|
||||
height: 5.2rem;
|
||||
background: #fff;
|
||||
box-shadow: inset -0.2rem -2rem 2rem rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.login__form {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 50%;
|
||||
padding: 1.5rem 2.5rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.login__row {
|
||||
height: 5rem;
|
||||
padding-top: 1rem;
|
||||
border-bottom: 1px solid rgba(255, 255, 255, 0.2);
|
||||
}
|
||||
|
||||
.login__icon {
|
||||
margin-bottom: -0.4rem;
|
||||
margin-right: 0.5rem;
|
||||
}
|
||||
|
||||
.login__icon.name path {
|
||||
stroke-dasharray: 73.50196075439453;
|
||||
stroke-dashoffset: 73.50196075439453;
|
||||
-webkit-animation: animatePath 2s 0.5s forwards;
|
||||
animation: animatePath 2s 0.5s forwards;
|
||||
}
|
||||
|
||||
.login__icon.pass path {
|
||||
stroke-dasharray: 92.10662841796875;
|
||||
stroke-dashoffset: 92.10662841796875;
|
||||
-webkit-animation: animatePath 2s 0.5s forwards;
|
||||
animation: animatePath 2s 0.5s forwards;
|
||||
}
|
||||
|
||||
.login__input {
|
||||
display: inline-block;
|
||||
width: 22rem;
|
||||
height: 100%;
|
||||
padding-left: 1.5rem;
|
||||
font-size: 1.5rem;
|
||||
background: transparent;
|
||||
color: #FDFCFD;
|
||||
}
|
||||
|
||||
.login__submit {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 4rem;
|
||||
margin: 5rem 0 2.2rem;
|
||||
color: rgba(255, 255, 255, 0.8);
|
||||
background: #383838;
|
||||
font-size: 1.5rem;
|
||||
border-radius: 3rem;
|
||||
cursor: pointer;
|
||||
overflow: hidden;
|
||||
-webkit-transition: width 0.3s 0.15s, font-size 0.1s 0.15s;
|
||||
transition: width 0.3s 0.15s, font-size 0.1s 0.15s;
|
||||
}
|
||||
|
||||
.login__submit:after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
margin-left: -1.5rem;
|
||||
margin-top: -1.5rem;
|
||||
width: 3rem;
|
||||
height: 3rem;
|
||||
border: 2px dotted #fff;
|
||||
border-radius: 50%;
|
||||
border-left: none;
|
||||
border-bottom: none;
|
||||
-webkit-transition: opacity 0.1s 0.4s;
|
||||
transition: opacity 0.1s 0.4s;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.login__submit.processing {
|
||||
width: 4rem;
|
||||
font-size: 0;
|
||||
}
|
||||
|
||||
.login__submit.processing:after {
|
||||
opacity: 1;
|
||||
-webkit-animation: rotate 0.5s 0.4s infinite linear;
|
||||
animation: rotate 0.5s 0.4s infinite linear;
|
||||
}
|
||||
|
||||
.login__submit.success {
|
||||
-webkit-transition: opacity 0.1s 0.3s, background-color 0.1s 0.3s, -webkit-transform 0.3s 0.1s ease-out;
|
||||
transition: opacity 0.1s 0.3s, background-color 0.1s 0.3s, -webkit-transform 0.3s 0.1s ease-out;
|
||||
transition: transform 0.3s 0.1s ease-out, opacity 0.1s 0.3s, background-color 0.1s 0.3s;
|
||||
transition: transform 0.3s 0.1s ease-out, opacity 0.1s 0.3s, background-color 0.1s 0.3s, -webkit-transform 0.3s 0.1s ease-out;
|
||||
-webkit-transform: scale(30);
|
||||
transform: scale(30);
|
||||
opacity: 0.9;
|
||||
}
|
||||
|
||||
.login__submit.success:after {
|
||||
-webkit-transition: opacity 0.1s 0s;
|
||||
transition: opacity 0.1s 0s;
|
||||
opacity: 0;
|
||||
-webkit-animation: none;
|
||||
animation: none;
|
||||
}
|
||||
|
||||
.login__signup {
|
||||
font-size: 1.2rem;
|
||||
color: #ABA8AE;
|
||||
}
|
||||
|
||||
.login__signup a {
|
||||
color: #fff;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.ripple {
|
||||
position: absolute;
|
||||
width: 15rem;
|
||||
height: 15rem;
|
||||
margin-left: -7.5rem;
|
||||
margin-top: -7.5rem;
|
||||
background: rgba(0, 0, 0, 0.4);
|
||||
-webkit-transform: scale(0);
|
||||
transform: scale(0);
|
||||
-webkit-animation: animRipple 0.4s;
|
||||
animation: animRipple 0.4s;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
@-webkit-keyframes animRipple {
|
||||
to {
|
||||
-webkit-transform: scale(3.5);
|
||||
transform: scale(3.5);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes animRipple {
|
||||
to {
|
||||
-webkit-transform: scale(3.5);
|
||||
transform: scale(3.5);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes rotate {
|
||||
to {
|
||||
-webkit-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes rotate {
|
||||
to {
|
||||
-webkit-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes animatePath {
|
||||
to {
|
||||
stroke-dashoffset: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes animatePath {
|
||||
to {
|
||||
stroke-dashoffset: 0;
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 827 KiB After Width: | Height: | Size: 827 KiB |
Binary file not shown.
After Width: | Height: | Size: 39 KiB |
@ -1,109 +1,154 @@
|
||||
<?php
|
||||
require(__DIR__.'/login.php');
|
||||
define('PROJECT_ROOT', getcwd());
|
||||
?>
|
||||
require(__DIR__ . '/login.php');
|
||||
define('PROJECT_ROOT', getcwd());
|
||||
?>
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head lang="en">
|
||||
<title>MIT Learning Manager 2.5</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
|
||||
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
|
||||
<!-- Include our stylesheets -->
|
||||
<link href="assets/css/styles.css?random=<?php echo uniqid(); ?>" rel="stylesheet"/>
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.css" />
|
||||
|
||||
<!-- Font Awesome -->
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css" />
|
||||
|
||||
<!-- Matomo -->
|
||||
<script type="text/javascript">
|
||||
var _paq = window._paq = window._paq || [];
|
||||
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
|
||||
_paq.push(['trackPageView']);
|
||||
_paq.push(['enableLinkTracking']);
|
||||
(function() {
|
||||
var u="https://analytics.michu-it.com/";
|
||||
_paq.push(['setTrackerUrl', u+'matomo.php']);
|
||||
_paq.push(['setSiteId', '3']);
|
||||
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
||||
g.type='text/javascript'; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
|
||||
})();
|
||||
</script>
|
||||
<noscript><p><img src="https://analytics.michu-it.com/matomo.php?idsite=3&rec=1" style="border:0;" alt="" /></p></noscript>
|
||||
<!-- End Matomo Code -->
|
||||
</head>
|
||||
<body>
|
||||
<div class="filemanager">
|
||||
<div class="header">
|
||||
MIT Learning Manager
|
||||
</div>
|
||||
<div class="search">
|
||||
<input type="search" placeholder="Find a file.." />
|
||||
</div>
|
||||
<div class="breadcrumbs"></div>
|
||||
<a class="button folderName" id="backButton" href=""><i class="fa fa-arrow-left" aria-hidden="true"></i> Go Back</a>
|
||||
<a class="button" href="./"><i class="fa fa-home" aria-hidden="true"></i> Home</a>
|
||||
|
||||
<ul class="data"></ul>
|
||||
<div class="nothingfound">
|
||||
<div class="nofiles"></div>
|
||||
<span>Error! - No files here.</span>
|
||||
</div>
|
||||
|
||||
<html>
|
||||
|
||||
<head lang="en">
|
||||
<title>Michu IT Learning Manager 2.0</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
|
||||
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
|
||||
<!-- Include our stylesheets -->
|
||||
<link href="assets/css/styles.css?random=<?php echo uniqid(); ?>" rel="stylesheet" />
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.css" />
|
||||
<!-- Font Awesome -->
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css" />
|
||||
|
||||
<!-- Matomo -->
|
||||
<script type="text/javascript">
|
||||
var _paq = window._paq = window._paq || [];
|
||||
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
|
||||
_paq.push(["setCookieDomain", "*.michu-it.com"]);
|
||||
_paq.push(['trackPageView']);
|
||||
_paq.push(['enableLinkTracking']);
|
||||
(function() {
|
||||
var u="https://analytics.michu-it.com/";
|
||||
_paq.push(['setTrackerUrl', u+'matomo.php']);
|
||||
_paq.push(['setSiteId', '3']);
|
||||
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
||||
g.type='text/javascript'; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
|
||||
})();
|
||||
</script>
|
||||
<noscript><p><img src="https://analytics.michu-it.com/matomo.php?idsite=3&rec=1" style="border:0;" alt="" /></p></noscript>
|
||||
<!-- End Matomo Code -->
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="filemanager">
|
||||
<div class="header">
|
||||
Michu IT Learning Manager
|
||||
</div>
|
||||
<div class="search">
|
||||
<input type="search" placeholder="Find a file.." />
|
||||
</div>
|
||||
<div class="breadcrumbs"></div>
|
||||
|
||||
<a class="button folderName" id="backButton" href=""><i class="fa fa-arrow-left" aria-hidden="true"></i> Go Back</a>
|
||||
<a class="button" href="./"><i class="fa fa-home" aria-hidden="true"></i> Home</a>
|
||||
|
||||
<div class="netcloud-logo"></div>
|
||||
<div class="loader">Loading...</div>
|
||||
|
||||
<ul class="data"></ul>
|
||||
<div class="nothingfound">
|
||||
<div class="nofiles"></div>
|
||||
<span>Error! - No files here.</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Include our script files -->
|
||||
<script src="https://code.jquery.com/jquery-3.5.1.js"></script>
|
||||
<script src="assets/js/script.js?random=<?php echo uniqid(); ?>"></script>
|
||||
<!-- FancyBox -->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.js"></script>
|
||||
<script type="text/javascript">
|
||||
function getCookie(cname) {
|
||||
var name = cname + "=";
|
||||
var decodedCookie = decodeURIComponent(document.cookie);
|
||||
var ca = decodedCookie.split(';');
|
||||
for(var i = 0; i < ca.length; i++) {
|
||||
<!-- Include our script files -->
|
||||
<script src="https://code.jquery.com/jquery-3.5.1.js"></script>
|
||||
<script src="assets/js/script.js?random=<?php echo uniqid(); ?>"></script>
|
||||
<!-- FancyBox -->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.js"></script>
|
||||
<script type="text/javascript">
|
||||
function getCookie(cname) {
|
||||
var name = cname + "=";
|
||||
var decodedCookie = decodeURIComponent(document.cookie);
|
||||
var ca = decodedCookie.split(';');
|
||||
for (var i = 0; i < ca.length; i++) {
|
||||
var c = ca[i];
|
||||
while (c.charAt(0) == ' ') {
|
||||
c = c.substring(1);
|
||||
c = c.substring(1);
|
||||
}
|
||||
if (c.indexOf(name) == 0) {
|
||||
return c.substring(name.length, c.length);
|
||||
return c.substring(name.length, c.length);
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
function setCookie(cname,cvalue) {
|
||||
document.cookie = cname + "=" + cvalue + "; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
// initialize array only if emty
|
||||
var json_str=getCookie("watchedVideoArray");
|
||||
if (json_str == "") {
|
||||
// If never used this page create an initial array
|
||||
var arr_watchstatus = [
|
||||
"netcloud-init"
|
||||
];
|
||||
} else {
|
||||
// Decode allready watched elements from cookie
|
||||
var arr_watchstatus = JSON.parse(json_str);
|
||||
}
|
||||
function setCookie(cname, cvalue) {
|
||||
document.cookie = cname + "=" + cvalue + "; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/";
|
||||
}
|
||||
|
||||
// initialize array only if emty
|
||||
var json_str = getCookie("watchedVideoArray");
|
||||
if (json_str == "") {
|
||||
// If never used this page create an initial array
|
||||
var arr_watchstatus = [
|
||||
"netcloud-init"
|
||||
];
|
||||
} else {
|
||||
// Decode allready watched elements from cookie
|
||||
var arr_watchstatus = JSON.parse(json_str);
|
||||
}
|
||||
|
||||
// initiate video container
|
||||
$.fancybox.defaults.video.tpl = '<video class="fancybox-video" controls controlsList="nodownload" poster="{{poster}}">' +
|
||||
'<source src="{{src}}" type="{{format}}" />' +
|
||||
'Sorry, your browser doesn\'t support embedded videos, <a href="{{src}}">download</a> and watch with your favorite video player!!' +
|
||||
"</video><div class='speedControl'><div class='indicator'>1x</div></div>";
|
||||
|
||||
$(document).on('afterClose.fb', function(e, instance, slide) {
|
||||
console.info(slide.opts.$orig);
|
||||
//console.info( slide.opts.$orig[0].dataset.src ); //Gets Video Path from clicked link
|
||||
|
||||
// append new value to the array
|
||||
arr_watchstatus.push(slide.opts.$orig[0].dataset.src); // adds new video path to array!
|
||||
var json_str = JSON.stringify(arr_watchstatus); // JSON encodes the array
|
||||
setCookie('watchedVideoArray', json_str); // Set new JSON Value to cookie
|
||||
//parent.location.reload(true);
|
||||
|
||||
$(document).on('afterClose.fb', function( e, instance, slide ) {
|
||||
console.info( slide.opts.$orig );
|
||||
//console.info( slide.opts.$orig[0].dataset.src ); //Gets Video Path from clicked link
|
||||
|
||||
// append new value to the array
|
||||
arr_watchstatus.push(slide.opts.$orig[0].dataset.src); // adds new video path to array!
|
||||
var json_str = JSON.stringify(arr_watchstatus); // JSON encodes the array
|
||||
setCookie('watchedVideoArray', json_str); // Set new JSON Value to cookie
|
||||
//parent.location.reload(true);
|
||||
|
||||
slide.opts.$orig[0].childNodes[5].style.display = "inline"; // After closing set green thick!
|
||||
slide.opts.$orig[0].childNodes[5].style.display = "inline"; // After closing set green thick!
|
||||
});
|
||||
|
||||
// setup video play speed functions on modal open:
|
||||
$(document).on('afterLoad.fb', function( e, instance, slide ) {
|
||||
|
||||
//console.info( "Works" );
|
||||
const video = document.querySelector('video');
|
||||
const speedControl = document.querySelector('.speedControl');
|
||||
const indicator = document.querySelector('.indicator');
|
||||
|
||||
let mousedown = false;
|
||||
|
||||
speedControl.addEventListener('mousedown', () => mousedown = true);
|
||||
speedControl.addEventListener('mouseup', () => mousedown = false);
|
||||
speedControl.addEventListener('mouseleave', () => mousedown = false);
|
||||
|
||||
speedControl.addEventListener('mousemove', function(e) {
|
||||
if (!mousedown) return;
|
||||
const min = 0.5;
|
||||
const max = 2;
|
||||
const position = e.pageY - this.offsetTop;
|
||||
const percent = position / this.offsetHeight;
|
||||
const height = Math.floor(percent * 1000) / 10 + '%';
|
||||
const playbackRate = percent * (max - min) + min;
|
||||
if (playbackRate < 0.5) playbackRate = 0.5;
|
||||
|
||||
indicator.style.height = height;
|
||||
indicator.innerText = playbackRate.toFixed(1) + 'x';
|
||||
video.playbackRate = playbackRate;
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,3 @@
|
||||
<?php
|
||||
phpinfo();
|
||||
?>
|
Loading…
Reference in New Issue