Browse Source

Merge pull request #1103 from causefx/v2-develop

V2 develop
causefx 7 years ago
parent
commit
588c9895f6

+ 4 - 5
api/functions.php

@@ -28,12 +28,11 @@ if (isset($GLOBALS['dbLocation'])) {
 	}
 	if ($GLOBALS['docker']) {
 		$getBranch = file_get_contents(dirname(__DIR__, 1) . DIRECTORY_SEPARATOR . 'Docker.txt');
-		$getBranch = (empty($getBranch)) ? 'v2-master' : $getBranch;
+		$getBranch = (empty($getBranch)) ? 'v2-master' : trim($getBranch);
 		$GLOBALS['branch'] = $getBranch;
-		$getCommit = file_get_contents(dirname(__DIR__, 1) . DIRECTORY_SEPARATOR . 'Github.txt');
-		$getCommit = (empty($getCommit)) ? 'n/a' : $getCommit;
-		$GLOBALS['commit'] = $getCommit;
-		
+		if (!isset($GLOBALS['commit']) || $GLOBALS['commit'] == 'n/a') {
+			$GLOBALS['commit'] = $GLOBALS['quickCommit'];
+		}
 	}
 	//Upgrade Check
 	upgradeCheck();

+ 50 - 12
api/functions/homepage-connect-functions.php

@@ -386,6 +386,7 @@ function resolvePlexItem($item)
 	$plexItem['uid'] = (string)$item['ratingKey'];
 	$plexItem['elapsed'] = isset($item['viewOffset']) && $item['viewOffset'] !== '0' ? (int)$item['viewOffset'] : null;
 	$plexItem['duration'] = isset($item['duration']) ? (int)$item['duration'] : (int)$item->Media['duration'];
+	$plexItem['addedAt'] = isset($item['addedAt']) ? (int)$item['addedAt'] : null;
 	$plexItem['watched'] = ($plexItem['elapsed'] && $plexItem['duration'] ? floor(($plexItem['elapsed'] / $plexItem['duration']) * 100) : 0);
 	$plexItem['transcoded'] = isset($item->TranscodeSession['progress']) ? floor((int)$item->TranscodeSession['progress'] - $plexItem['watched']) : '';
 	$plexItem['stream'] = isset($item->Media->Part->Stream['decision']) ? (string)$item->Media->Part->Stream['decision'] : '';
@@ -483,6 +484,7 @@ function plexConnect($action, $key = null)
 {
 	if ($GLOBALS['homepagePlexEnabled'] && !empty($GLOBALS['plexURL']) && !empty($GLOBALS['plexToken']) && !empty($GLOBALS['plexID'] && qualifyRequest($GLOBALS['homepagePlexAuth']))) {
 		$url = qualifyURL($GLOBALS['plexURL']);
+		$multipleURL = false;
 		$ignore = array();
 		$resolve = true;
 		switch ($action) {
@@ -494,7 +496,11 @@ function plexConnect($action, $key = null)
 				$resolve = false;
 				break;
 			case 'recent':
-				$url = $url . "/library/recentlyAdded?X-Plex-Token=" . $GLOBALS['plexToken'] . "&limit=" . $GLOBALS['homepageRecentLimit'];
+				//$url = $url . "/library/recentlyAdded?X-Plex-Token=" . $GLOBALS['plexToken'] . "&limit=" . $GLOBALS['homepageRecentLimit'];
+				$urls['movie'] = $url . "/hubs/home/recentlyAdded?X-Plex-Token=" . $GLOBALS['plexToken'] . "&X-Plex-Container-Start=0&X-Plex-Container-Size=" . $GLOBALS['homepageRecentLimit'] . "&type=1";
+				$urls['tv'] = $url . "/hubs/home/recentlyAdded?X-Plex-Token=" . $GLOBALS['plexToken'] . "&X-Plex-Container-Start=0&X-Plex-Container-Size=" . $GLOBALS['homepageRecentLimit'] . "&type=2";
+				$urls['music'] = $url . "/hubs/home/recentlyAdded?X-Plex-Token=" . $GLOBALS['plexToken'] . "&X-Plex-Container-Start=0&X-Plex-Container-Size=" . $GLOBALS['homepageRecentLimit'] . "&type=8";
+				$multipleURL = true;
 				break;
 			case 'metadata':
 				$url = $url . "/library/metadata/" . $key . "?X-Plex-Token=" . $GLOBALS['plexToken'];
@@ -511,18 +517,49 @@ function plexConnect($action, $key = null)
 				break;
 		}
 		try {
-			$options = (localURL($url)) ? array('verify' => false) : array();
-			$response = Requests::get($url, array(), $options);
-			libxml_use_internal_errors(true);
-			if ($response->success) {
-				$items = array();
-				$plex = simplexml_load_string($response->body);
-				foreach ($plex as $child) {
-					if (!in_array($child['type'], $ignore) && isset($child['librarySectionID'])) {
-						$items[] = resolvePlexItem($child);
+			if (!$multipleURL) {
+				$options = (localURL($url)) ? array('verify' => false) : array();
+				$response = Requests::get($url, array(), $options);
+				libxml_use_internal_errors(true);
+				if ($response->success) {
+					$items = array();
+					$plex = simplexml_load_string($response->body);
+					foreach ($plex as $child) {
+						if (!in_array($child['type'], $ignore) && isset($child['librarySectionID'])) {
+							$items[] = resolvePlexItem($child);
+						}
+					}
+					$api['content'] = ($resolve) ? $items : $plex;
+					$api['plexID'] = $GLOBALS['plexID'];
+					$api['showNames'] = true;
+					$api['group'] = '1';
+					return $api;
+				}
+			} else {
+				foreach ($urls as $k => $v) {
+					$options = (localURL($v)) ? array('verify' => false) : array();
+					$response = Requests::get($v, array(), $options);
+					libxml_use_internal_errors(true);
+					if ($response->success) {
+						$items = array();
+						$plex = simplexml_load_string($response->body);
+						foreach ($plex as $child) {
+							if (!in_array($child['type'], $ignore) && isset($child['librarySectionID'])) {
+								$items[] = resolvePlexItem($child);
+							}
+						}
+						if (isset($api)) {
+							$api['content'] = array_merge($api['content'], ($resolve) ? $items : $plex);
+						} else {
+							$api['content'] = ($resolve) ? $items : $plex;
+						}
 					}
 				}
-				$api['content'] = ($resolve) ? $items : $plex;
+				if (isset($api['content'])) {
+					usort($api['content'], function ($a, $b) {
+						return $b['addedAt'] <=> $a['addedAt'];
+					});
+				}
 				$api['plexID'] = $GLOBALS['plexID'];
 				$api['showNames'] = true;
 				$api['group'] = '1';
@@ -1159,7 +1196,8 @@ function getCalendar()
 							'imagetypeFilter' => 'ical',
 							'className' => 'bg-calendar calendar-item bg-custom-calendar',
 							'start' => $startDate,
-							'end' => $endDate
+							'end' => $endDate,
+							'bgColor' => str_replace('text', 'bg', $extraClass),
 						);
 					}
 				}

+ 16 - 5
api/functions/organizr-functions.php

@@ -373,18 +373,29 @@ function qualifyRequest($accessLevelNeeded)
 function isApprovedRequest($method)
 {
 	$requesterToken = isset(getallheaders()['Token']) ? getallheaders()['Token'] : (isset($_GET['apikey']) ? $_GET['apikey'] : false);
-	$requesterFormKeyHeader = isset(getallheaders()['Formkey']) ? getallheaders()['Formkey'] : false;
+	if (isset($_POST['data']['formKey'])) {
+		$formKey = $_POST['data']['formKey'];
+	} elseif (isset(getallheaders()['Formkey'])) {
+		$formKey = getallheaders()['Formkey'];
+	} elseif (isset(getallheaders()['formkey'])) {
+		$formKey = getallheaders()['formkey'];
+	} elseif (isset(getallheaders()['formKey'])) {
+		$formKey = getallheaders()['formKey'];
+	} elseif (isset(getallheaders()['FormKey'])) {
+		$formKey = getallheaders()['FormKey'];
+	} else {
+		$formKey = false;
+	}
 	// Check token or API key
 	// If API key, return 0 for admin
 	if (strlen($requesterToken) == 20 && $requesterToken == $GLOBALS['organizrAPI']) {
 		//DO API CHECK
 		return true;
 	} elseif ($method == 'POST') {
-		$formKey = (isset($_POST['data']['formKey'])) ? $_POST['data']['formKey'] : '';
-		if (password_verify(substr($GLOBALS['quickConfig']['organizrHash'], 2, 10), $formKey)) {
-			return true;
-		} elseif (($requesterFormKeyHeader) && password_verify(substr($GLOBALS['quickConfig']['organizrHash'], 2, 10), $requesterFormKeyHeader)) {
+		if (checkFormKey($formKey)) {
 			return true;
+		} else {
+			writeLog('error', 'API ERROR: Unable to authenticate Form Key: ' . $formKey, $GLOBALS['organizrUser']['username']);
 		}
 	} else {
 		return true;

+ 18 - 7
api/functions/static-globals.php

@@ -1,7 +1,7 @@
 <?php
 // ===================================
 // Organizr Version
-$GLOBALS['installedVersion'] = '2.0.32';
+$GLOBALS['installedVersion'] = '2.0.49';
 // ===================================
 // Quick php Version check
 $GLOBALS['minimumPHP'] = '7.1.3';
@@ -13,6 +13,12 @@ $GLOBALS['userConfigPath'] = dirname(__DIR__, 1) . DIRECTORY_SEPARATOR . 'config
 $GLOBALS['defaultConfigPath'] = dirname(__DIR__, 1) . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'default.php';
 $GLOBALS['currentTime'] = gmdate("Y-m-d\TH:i:s\Z");
 $GLOBALS['docker'] = (file_exists(dirname(__DIR__, 2) . DIRECTORY_SEPARATOR . 'Docker.txt')) ? true : false;
+if ($GLOBALS['docker']) {
+	$getCommit = file_get_contents(dirname(__DIR__, 2) . DIRECTORY_SEPARATOR . 'Github.txt');
+	$getCommit = (empty($getCommit)) ? 'n/a' : $getCommit;
+	$GLOBALS['quickCommit'] = $getCommit;
+}
+$GLOBALS['fileHash'] = (isset($GLOBALS['quickCommit'])) ? $GLOBALS['quickCommit'] : $GLOBALS['installedVersion'];
 $GLOBALS['quickConfig'] = (file_exists($GLOBALS['userConfigPath'])) ? loadConfigOnce($GLOBALS['userConfigPath']) : null;
 // Quick function for plugins
 function pluginFiles($type)
@@ -21,12 +27,12 @@ function pluginFiles($type)
 	switch ($type) {
 		case 'js':
 			foreach (glob(dirname(__DIR__, 1) . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . 'js' . DIRECTORY_SEPARATOR . "*.js") as $filename) {
-				$files .= '<script src="api/plugins/js/' . basename($filename) . '?v=' . $GLOBALS['installedVersion'] . '" defer="true"></script>';
+				$files .= '<script src="api/plugins/js/' . basename($filename) . '?v=' . $GLOBALS['fileHash'] . '" defer="true"></script>';
 			}
 			break;
 		case 'css':
 			foreach (glob(dirname(__DIR__, 1) . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . 'css' . DIRECTORY_SEPARATOR . "*.js") as $filename) {
-				$files .= '<link href="api/plugins/css/' . basename($filename) . $GLOBALS['installedVersion'] . '" rel="stylesheet">';
+				$files .= '<link href="api/plugins/css/' . basename($filename) . $GLOBALS['fileHash'] . '" rel="stylesheet">';
 			}
 			break;
 		default:
@@ -47,16 +53,21 @@ function loadConfigOnce($path = null)
 	}
 }
 
-function formKey()
+function formKey($script = true)
 {
-	if (isset($GLOBALS['quickConfig']['organizrAPI'])) {
-		if ($GLOBALS['quickConfig']['organizrAPI'] !== '') {
+	if (isset($GLOBALS['quickConfig']['organizrHash'])) {
+		if ($GLOBALS['quickConfig']['organizrHash'] !== '') {
 			$hash = password_hash(substr($GLOBALS['quickConfig']['organizrHash'], 2, 10), PASSWORD_BCRYPT);
-			return '<script>local("s","formKey","' . $hash . '");</script>';
+			return ($script) ? '<script>local("s","formKey","' . $hash . '");</script>' : $hash;
 		}
 	}
 }
 
+function checkFormKey($formKey = '')
+{
+	return password_verify(substr($GLOBALS['quickConfig']['organizrHash'], 2, 10), $formKey);
+}
+
 function favIcons()
 {
 	$favicon = '

+ 1 - 0
api/pages/settings.php

@@ -219,6 +219,7 @@ if (file_exists('config' . DIRECTORY_SEPARATOR . 'config.php')) {
 	                                        <div class="white-box bg-org">
 	                                            <h4 lang="en">Want to help translate?</h4>
 	                                            <p lang="en">Head on over to POEditor and help us translate Organizr into your language</p>
+	                                            <p lang="en">I will try and import new strings every Friday</p>
 	                                        </div>
 	                                    </a>
     								</div>

+ 26 - 0
css/organizr.css

@@ -1247,6 +1247,32 @@ span.fc-title {
     position: absolute;
     top: 20px;
 }
+.request-title-movie,
+.request-title-tv,
+.request-title-music {
+    position: absolute;
+    top: -40px;
+    right: -40px;
+    background: transparent;
+    width: 25px;
+    color: white;
+    padding: 1px 0px;
+    text-align: center;
+    font-size: 15px;
+    border-radius: 0px 0px 0px 0px;
+    opacity: 0;
+    -webkit-transition: all .4s ease-in-out;
+    transition: all .4s ease-in-out;
+}
+.item:hover .request-title-movie,
+.item:hover .request-title-tv,
+.item:hover .request-title-music {
+    opacity: 1;
+    top: 5px;
+    right: 5px;
+    -webkit-transition: all .4s ease;
+    transition: all .4s ease;
+}
 /*
 body,
 html {

File diff suppressed because it is too large
+ 0 - 0
css/organizr.min.css


+ 5 - 5
index.php

@@ -33,10 +33,10 @@
     <link href="css/animate.css" rel="stylesheet">
     <link href="css/simplebar.css" rel="stylesheet">
     <link href="css/plyr.css" rel="stylesheet">
-    <link id="style" href="css/dark.css?v=<?php echo $GLOBALS['installedVersion']; ?>" rel="stylesheet">
-    <link href="css/organizr.min.css?v=<?php echo $GLOBALS['installedVersion']; ?>" rel="stylesheet">
+    <link id="style" href="css/dark.css?v=<?php echo $GLOBALS['fileHash']; ?>" rel="stylesheet">
+    <link href="css/organizr.min.css?v=<?php echo $GLOBALS['fileHash']; ?>" rel="stylesheet">
 	<?php echo pluginFiles('css'); ?>
-    <link id="theme" href="css/themes/Organizr.css?v=<?php echo $GLOBALS['installedVersion']; ?>" rel="stylesheet">
+    <link id="theme" href="css/themes/Organizr.css?v=<?php echo $GLOBALS['fileHash']; ?>" rel="stylesheet">
     <style id="user-appearance"></style>
     <style id="custom-theme-css"></style>
     <style id="custom-css"></style>
@@ -286,8 +286,8 @@
 <script src="js/plyr.js"></script>
 <script src="js/simplebar.js"></script>
 <script src="https://apis.google.com/js/client.js?onload=googleApiClientReady"></script>
-<script src="js/functions.js?v=<?php echo $GLOBALS['installedVersion']; ?>"></script>
-<script src="js/custom.min.js?v=<?php echo $GLOBALS['installedVersion']; ?>"></script>
+<script src="js/functions.js?v=<?php echo $GLOBALS['fileHash']; ?>"></script>
+<script src="js/custom.min.js?v=<?php echo $GLOBALS['fileHash']; ?>"></script>
 <script id="custom-theme-javascript"></script>
 <script id="custom-javascript"></script>
 <script src="https://js.pusher.com/4.1/pusher.min.js"></script>

+ 6 - 1
js/functions.js

@@ -199,6 +199,9 @@ function isNumberKey(evt) {
     return true;
 }
 function setTabInfo(tab,action,value){
+    if(tab == 'Organizr-Support'){
+        return false;
+    }
     if(tab !== null && action !== null && value !== null){
         switch(action){
             case 'active':
@@ -4103,6 +4106,7 @@ function buildRequestItem(array, extra=null){
 	$.each(array, function(i,v) {
 			if(extra == null){
                 var approveID = (v.type == 'tv') ? v.id : v.request_id;
+                var iconType = (v.type == 'tv') ? 'fa-tv ' : 'fa-film';
 				var badge = '';
 				var badge2 = '';
 				var bg = (v.background.includes('.')) ? v.background : 'plugins/images/cache/no-np.png';
@@ -4140,6 +4144,7 @@ function buildRequestItem(array, extra=null){
 						<div class="inside-request-div `+badge+`"></div>
 					</div>
 					<div class="hover-homepage-item"></div>
+					<span class="elip request-title-`+v.type+`"><i class="fa `+iconType+`"></i></span>
 					<span class="elip recent-title">`+v.title+user2+`</span>
 					<div id="request-`+v.id+`" class="white-popup mfp-with-anim mfp-hide">
 						<div class="col-md-8 col-md-offset-2">
@@ -5232,7 +5237,7 @@ function buildMetadata(array, source){
 	                <h2 class="m-b-0 font-medium pull-right text-right">
 						`+v.title+`<button type="button" class="btn bg-org btn-circle close-popup m-l-10"><i class="fa fa-times"></i> </button><br>
 						<small class="m-t-0 text-white">`+v.metadata.tagline+`</small><br>
-						<button class="btn waves-effect waves-light openTab bg-`+source+`" type="button" data-tab-name="`+v.tabName+`" data-type="`+v.type+`" data-open-tab="`+v.openTab+`" data-url="`+v.address+`" href="javascript:void(0);"> <i class="fa mdi mdi-`+source+` fa-2x"></i> </button>
+						<button class="btn waves-effect waves-light openTab bg-`+source+`" type="button" data-tab-name="`+cleanClass(v.tabName)+`" data-type="`+v.type+`" data-open-tab="`+v.openTab+`" data-url="`+v.address+`" href="javascript:void(0);"> <i class="fa mdi mdi-`+source+` fa-2x"></i> </button>
 						`+buildYoutubeLink(v.title+' '+v.metadata.year+' '+v.type)+`
 					</h2>
 	            </div>

+ 14 - 14
js/langpack/de[German].json

@@ -479,31 +479,31 @@
         "Authentication": "Authentifizierung",
         "SMTP Port": "SMTP-Port",
         "SMTP Host": "SMTP-Host",
-        "Results For cmd:": "",
-        "Organizr Information:": "",
-        "DB Schema": "",
+        "Results For cmd:": "Ergebnis für cmd:",
+        "Organizr Information:": "Organizr Informationen:",
+        "DB Schema": "DB Schema",
         "Misc SSO": "",
         "Tautulli SSO": "",
         "Plex SSO": "",
         "Ombi SSO": "",
-        "Commands": "",
-        "Input Command": "",
+        "Commands": "Kommandos",
+        "Input Command": "Eingabekommando",
         "Organizr Debug Area": "",
-        "Google Ads": "",
-        "DB Folder": "",
-        "API Folder": "",
-        "Root Folder": "",
-        "Organizr Paths": "",
-        "Organizr News": "",
-        "Close Error": "",
-        "An Error Occured": "",
+        "Google Ads": "Google Werbung",
+        "DB Folder": "DB Ordner",
+        "API Folder": "API Ordner",
+        "Root Folder": "Root Ordner",
+        "Organizr Paths": "Organizr Pfad",
+        "Organizr News": "Organizr Neuigkeiten",
+        "Close Error": "Fehler schließen",
+        "An Error Occured": "Ein Fehler ist aufgetreten",
         "Debug Area": "",
         "Tab Local URL": "",
         "PRELOAD": "",
         "Use Ombi Alias Names": "",
         "TV Show Default Request": "",
         "Add to Combined Downloader": "",
-        "http(s)://hostname:port/xmlrpc": "",
+        "http(s)://hostname:port/xmlrpc": "http(s)://hostname:port/xmlrpc",
         "rTorrent API URL Override": "",
         "Enable Notify Sounds": "",
         "Remember Me Length": "",

+ 11 - 11
js/langpack/nb[Bokm&aring;l].json

@@ -243,7 +243,7 @@
         "Requests": "Forespørsler",
         "Become Sponsor": "Bli sponsor",
         "Splash Page": "Splash Page",
-        "Lock Screen": "Lock Screen",
+        "Lock Screen": "Lås Skjerm",
         "If you signed in with a Emby Acct... Please use the following link to change your password there:": "Om du logget inn med en Emby konto, benytt denne linken for å bytte passord:",
         "Password Notice": "Password melding",
         "If you signed in with a Plex Acct... Please use the following link to change your password there:": "Om du logget inn med en Plex konto, benytt denne linken for å bytte passord:",
@@ -297,10 +297,10 @@
         "Misc Options": "Misc Options",
         "Search My Media": "Search My Media",
         "Import Plex Users": "Import Plex Users",
-        "Import": "Import",
+        "Import": "Importer",
         "INSTALL": "INSTALL",
         "INFO": "INFO",
-        "Day": "Day",
+        "Day": "Dag",
         "Week": "Week",
         "Month": "Month",
         "List": "List",
@@ -364,8 +364,8 @@
         "URL": "URL",
         "Ombi": "Ombi",
         "Items Per Day": "Items Per Day",
-        "Time Format": "Time Format",
-        "Default View": "Default View",
+        "Time Format": "Tidsformat",
+        "Default View": "Standard Visning",
         "Start Day": "Start Dag",
         "SickRage": "SickRage",
         "CouchPotato": "CouchPotato",
@@ -405,7 +405,7 @@
         "separate by comma's": "separate by comma's",
         "iCal URL's": "iCal URL's",
         "Enable iCal": "Enable iCal",
-        "Calendar": "Calendar",
+        "Calendar": "Kalender",
         "Theme Javascript": "Theme Javascript",
         "Custom Javascript": "Custom Javascript",
         "Theme CSS [Can replace colors from above]": "Theme CSS [Can replace colors from above]",
@@ -423,7 +423,7 @@
         "Test Message": "Test Message",
         "Position": "Position",
         "Style": "Style",
-        "Theme": "Theme",
+        "Theme": "Tema",
         "Button Text Color": "Button Text Color",
         "Button Color": "Button Color",
         "Accent Text Color": "Accent Text Color",
@@ -439,7 +439,7 @@
         "Use Logo instead of Title": "Use Logo instead of Title",
         "Title": "Title",
         "Logo": "Logo",
-        "Import Users": "Import Users",
+        "Import Users": "Importer Brukere",
         "Drop files here to upload": "Drop files here to upload",
         "SpeedTest Settings": "SpeedTest Settings",
         "PHP Mailer Settings": "PHP Mailer Settings",
@@ -456,15 +456,15 @@
         "Note": "Note",
         "Libraries": "Libraries",
         "Body": "Body",
-        "Name": "Name",
+        "Name": "Navn",
         "Template #4": "Template #4",
         "Template #3": "Template #3",
         "Template #2": "Template #2",
         "Reminder Template": "Reminder Template",
-        "Invite User": "Invite User",
+        "Invite User": "Inviter Bruker",
         "Reset Password": "Reset Password",
         "New Registration": "New Registration",
-        "Edit Template": "Edit Template",
+        "Edit Template": "Endre Mal",
         "Send Welcome E-Mail": "Send Welcome E-Mail",
         "Full URL": "Full URL",
         "WAN Logo URL": "WAN Logo URL",

+ 17 - 17
js/langpack/nl[Dutch].json

@@ -334,8 +334,8 @@
         "Host Address": "Host Adres",
         "Enable Plex oAuth": "Schakel Plex oAuth in",
         "Retrieve": "Haal op",
-        "Use Get Plex Machine Button": "Gebruik de Get Plex Machine Knop",
-        "Use Get Token Button": "Gebruik de Get Token Knop",
+        "Use Get Plex Machine Button": "Gebruik de Verkrijg Plex Machine Knop",
+        "Use Get Token Button": "Gebruik de Verkrijg Token Knop",
         "Plex Token": "Plex Token",
         "Authentication Backend": "Authenticatie Backend",
         "Authentication Type": "Authenticatie Type",
@@ -480,40 +480,40 @@
         "SMTP Port": "SMTP Pport",
         "SMTP Host": "SMTP Host",
         "Results For cmd:": "",
-        "Organizr Information:": "",
+        "Organizr Information:": "Organizr Informatie:",
         "DB Schema": "",
-        "Misc SSO": "",
-        "Tautulli SSO": "",
-        "Plex SSO": "",
-        "Ombi SSO": "",
+        "Misc SSO": "Overige SSO",
+        "Tautulli SSO": "Tautulli SSO",
+        "Plex SSO": "Plex SSO",
+        "Ombi SSO": "Ombi SSO",
         "Commands": "",
         "Input Command": "",
         "Organizr Debug Area": "",
         "Google Ads": "",
         "DB Folder": "",
         "API Folder": "",
-        "Root Folder": "",
+        "Root Folder": "Root-map",
         "Organizr Paths": "",
-        "Organizr News": "",
+        "Organizr News": "Organizr Nieuws",
         "Close Error": "",
         "An Error Occured": "",
         "Debug Area": "",
-        "Tab Local URL": "",
+        "Tab Local URL": "Lokale Tabblad URL",
         "PRELOAD": "",
-        "Use Ombi Alias Names": "",
-        "TV Show Default Request": "",
-        "Add to Combined Downloader": "",
+        "Use Ombi Alias Names": "Gebruik Ombi Alias Namen",
+        "TV Show Default Request": "TV Show Standaard Aanvraag",
+        "Add to Combined Downloader": "Voeg toe aan Gecombineerde Downloader",
         "http(s)://hostname:port/xmlrpc": "",
         "rTorrent API URL Override": "",
-        "Enable Notify Sounds": "",
-        "Remember Me Length": "",
+        "Enable Notify Sounds": "Zet Notify geluiden aan",
+        "Remember Me Length": "Onthoudt Mij Lengte",
         "Minimum Authentication for Debug Area": "",
         "Account DN": "",
         "Bind Username": "",
         "Account suffix - start with comma - ,ou=people,dc=domain,dc=tld": "",
-        "Account Suffix": "",
+        "Account Suffix": "Account Achtervoegsel",
         "Account prefix - i.e. Controller\\ from Controller\\Username for AD - uid= for OpenLDAP": "",
-        "Account Prefix": "",
+        "Account Prefix": "Account Voorvoegsel",
         "LDAP Backend Type": "",
         "Strict Plex Friends": ""
     }

+ 56 - 56
js/langpack/pl[Polish].json

@@ -21,7 +21,7 @@
         "Password": "Hasło",
         "Sign Up": "Zarejestruj się",
         "Don't have an account?": "Nie masz konta?",
-        "Forgot pwd?": "Zapomniałeś(-aś) hasła?",
+        "Forgot pwd?": "Zapomniałeś(-aś)?",
         "Remember Me": "Zapamiętaj",
         "Login": "Zaloguj się",
         "Installed": "Zainstalowane",
@@ -54,7 +54,7 @@
         "NOTE": "UWAGA",
         "Update Available": "Dostępna aktualizacja",
         "is available, goto": "jest dostępna, przejdź do",
-        "Update Tab": "Aktualizuj kartę",
+        "Update Tab": "Aktualizacje",
         "Database Name:": "Nazwa bazy danych:",
         "Database Name": "Nazwa bazy danych",
         "Database Location:": "Lokalizacja bazy danych:",
@@ -73,7 +73,7 @@
         "Business": "Komercyjna",
         "Personal": "Prywatna",
         "Choose License": "Wybór licencji:",
-        "Install Type": "Typ instalacji:",
+        "Install Type": "Typ instalacji",
         "Verify": "Zweryfikuj",
         "Database": "Baza danych",
         "Security": "Bezpieczeństwo",
@@ -183,7 +183,7 @@
         "Inactive": "Nieaktywne",
         "Everything Active": "Wszystko aktywne",
         "Nothing Active": "Nic nie jest aktywne",
-        "Choose Plex Machine": "Wybierz ID maszyny Plex",
+        "Choose Plex Machine": "Wybierz ID urządzenia Plex",
         "Test Speed to Server": "Testuj prędkość do serwera",
         "Test Server Speed": "Testuj prędkość serwera",
         "Subject": "Temat",
@@ -208,7 +208,7 @@
         "Parent Directory: ": "Katalog nadrzędny:",
         "The Database will contain sensitive information. Please place in directory outside of root Web Directory.": "Baza zawierać będzie wrażliwe dane. Proszę umieścić ją poza katalogiem strony.",
         "I Want to Help": "Chciał(a)bym pomóc",
-        "Head on over to POEditor and help us translate Organizr into your language": "Przejdź do POEditor i pomóż nam przetłumaczyć Organizr na Twój język",
+        "Head on over to POEditor and help us translate Organizr into your language": "Przejdź do POEditor i pomóż nam przetłumaczyć Organizr na twój język",
         "Want to help translate?": "Chcesz pomóc w tłumaczeniu?",
         "Single Sign-On": "Single Sign-On",
         "Coming Soon...": "Wkrótce...",
@@ -218,8 +218,8 @@
         "Edit User": "Edytuj użytkownika",
         "Password Again": "Ponownie hasło",
         "Template": "Szablon",
-        "Plex Machine": "ID maszyny Plex",
-        "Get Plex Machine": "Pobierz ID maszyny Plex",
+        "Plex Machine": "ID urządzenia Plex",
+        "Get Plex Machine": "Pobierz ID urządzenia Plex",
         "Grab It": "Pobierz",
         "Plex Password": "Hasło Plex",
         "Plex Username": "Nazwa użytkownika Plex",
@@ -233,14 +233,14 @@
         "Web Folder": "Folder sieciowy",
         "Dependencies Missing": "Brak zależności",
         "Organizr Dependency Check": "Sprawdzanie zależności Organizr",
-        "Please make sure both Token and Machine are filled in": "Proszę się upewnić, że i pole Token i ID maszyny są wypełnione",
+        "Please make sure both Token and Machine are filled in": "Proszę upewnić się, czy pola Token i ID urządzenia są wypełnione",
         "Loading Requests...": "Wczytywanie zgłoszeń...",
         "Loading Recent...": "Wczytywanie ostatnich...",
         "Loading Now Playing...": "Wczytywanie teraz odtwarzanych...",
         "Loading Playlists...": "Wczytywanie playlist...",
         "Loading Download Queue...": "Wczytywanie kolejki pobierania...",
         "Organizr Mod Picks": "Organizr Mod Picks",
-        "Requests": "Zgloszenia",
+        "Requests": "Zgłoszenia",
         "Become Sponsor": "Zostań sponsorem",
         "Splash Page": "Strona powitalna",
         "Lock Screen": "Ekran blokady",
@@ -262,8 +262,8 @@
         "The Registration Password will lockout the registration field with this password. {User-Generated]": "Hasło rejestracyjne będzie blokować pole rejestracyjne. [Generowane przez użytkownika]",
         "The Hash Key will be used to decrypt all passwords etc... on the server. {User-Generated]": "Klucz hash będzie używany do odszyfrowywania wszystkich haseł itp... na serwerze. [Generowane przez użytkownika]",
         "If using Plex or Emby - It is suggested that you use the username and email of the Admin account.": "Jeśli korzystasz z Plex lub Emby - zaleca się użycie nazwy użytkownika i e-maila konta administratora.",
-        "Business has Media items hidden [Plex, Emby etc...]": "Komercyjna ma ukryte elementy multimediów [Plex, Emby itp...]",
-        "Personal has everything unlocked - no restrictions": "Prywatna ma wszystko odblokowane - brak ograniczeń",
+        "Business has Media items hidden [Plex, Emby etc...]": "Komercyjna posiada ukryte elementy multimediów [Plex, Emby itp...]",
+        "Personal has everything unlocked - no restrictions": "Prywatna posiada wszystko odblokowane - brak ograniczeń",
         "Continue To Website": "Przejdź do strony internetowej",
         "Patreon": "Patreon",
         "Cryptos": "Cryptos",
@@ -274,13 +274,13 @@
         "THEME": "MOTYW",
         "Theme Marketplace": "Sklep motywów",
         "Test Tab": "Testuj kartę",
-        "Select or type Icon": "Wybierz lub wpisz ikonę",
+        "Select or type Icon": "Wybierz lub wyszukaj ikonę",
         "Choose Icon": "Wybierz ikonę",
         "Choose Image": "Wybierz obraz",
-        "Ping URL": "Ping URL",
+        "Ping URL": "URL pingowania",
         "Please set tab as [New Window] on next screen": "Ustaw kartę jako [Nowe okno] na następnym ekranie",
         "Tab can be set as iFrame": "Karta może być ustawiona jako iFrame",
-        "Premier": "Premier",
+        "Premier": "Premierowe",
         "Missing": "Brakujące",
         "Unaired": "Niewyemitowane",
         "Downloaded": "Pobrane",
@@ -311,8 +311,8 @@
         "Mark as Available": "Oznacz jako dostępne",
         "Approve": "Zatwierdź",
         "Start": "Start",
-        "Everyone Refresh Seconds": "Wszyscy Odświeżanie w sekundach",
-        "Admin Refresh Seconds": "Admin Odświeżanie w sekundach",
+        "Everyone Refresh Seconds": "Odświeżanie w sekundach (Wszyscy)",
+        "Admin Refresh Seconds": "Odświeżanie w sekundach (Admin)",
         "Minimum Authentication for Time Display": "Minimalne uwierzytelnienie dla wyświetlania czasu",
         "Show Ping Time": "Pokaż czas pingowania",
         "Offline Sound": "Dźwięk offline",
@@ -333,8 +333,8 @@
         "http{s) | ftp(s) | ldap(s)://hostname:port": "http{s) | ftp(s) | ldap(s)://nazwa_hosta:port",
         "Host Address": "Adres hosta",
         "Enable Plex oAuth": "Włącz Plex oAuth",
-        "Retrieve": "Odbierz",
-        "Use Get Plex Machine Button": "Użyj przycisku Pobierz ID maszyny Plex",
+        "Retrieve": "Pobierz",
+        "Use Get Plex Machine Button": "Użyj przycisku Pobierz ID urządzenia Plex",
         "Use Get Token Button": "Użyj przycisku Pobierz token",
         "Plex Token": "Token Plex",
         "Authentication Backend": "Uwierzytelnianie backend",
@@ -415,7 +415,7 @@
         "Click [Generate your Favicons and HTML code]": "Kliknij [Wygeneruj swoje ikony i kod HTML]",
         "Enter this path": "Wprowadź tę ścieżkę",
         "At bottom of page on [Favicon Generator Options] under [Path] choose [I cannot or I do not want to place favicon files at the root of my web site.]": "Na dole strony strony, w [Opcjach generatora ikon] pod [Ścieżka] wybierz [Nie mogę lub nie chcę umieszczać plików ikon w katalogu głównym mojej witryny.]",
-        "Edit settings to your liking": "Edytuj ustawienia według upodobań",
+        "Edit settings to your liking": "Edytuj ustawienia wg upodobań",
         "Choose your image to use": "Wybierz obraz do użycia",
         "Click [Select your Favicon picture]": "Kliknij [Wybierz swój obraz ikony]",
         "Instructions": "Instrukcje",
@@ -479,42 +479,42 @@
         "Authentication": "Poświadczenie",
         "SMTP Port": "Port SMTP",
         "SMTP Host": "Host SMTP",
-        "Results For cmd:": "",
-        "Organizr Information:": "",
-        "DB Schema": "",
-        "Misc SSO": "",
-        "Tautulli SSO": "",
-        "Plex SSO": "",
-        "Ombi SSO": "",
-        "Commands": "",
-        "Input Command": "",
-        "Organizr Debug Area": "",
-        "Google Ads": "",
-        "DB Folder": "",
-        "API Folder": "",
-        "Root Folder": "",
-        "Organizr Paths": "",
-        "Organizr News": "",
-        "Close Error": "",
-        "An Error Occured": "",
-        "Debug Area": "",
-        "Tab Local URL": "",
-        "PRELOAD": "",
-        "Use Ombi Alias Names": "",
-        "TV Show Default Request": "",
-        "Add to Combined Downloader": "",
-        "http(s)://hostname:port/xmlrpc": "",
-        "rTorrent API URL Override": "",
-        "Enable Notify Sounds": "",
-        "Remember Me Length": "",
-        "Minimum Authentication for Debug Area": "",
-        "Account DN": "",
-        "Bind Username": "",
-        "Account suffix - start with comma - ,ou=people,dc=domain,dc=tld": "",
-        "Account Suffix": "",
-        "Account prefix - i.e. Controller\\ from Controller\\Username for AD - uid= for OpenLDAP": "",
-        "Account Prefix": "",
-        "LDAP Backend Type": "",
-        "Strict Plex Friends": ""
+        "Results For cmd:": "Wyniki dla cmd:",
+        "Organizr Information:": "Informacje o Organizr:",
+        "DB Schema": "Schemat DB",
+        "Misc SSO": "Różne SSO",
+        "Tautulli SSO": "Tautulli SSO",
+        "Plex SSO": "Plex SSO",
+        "Ombi SSO": "Ombi SSO",
+        "Commands": "Polecenia",
+        "Input Command": "Wprowadzenie polecenia",
+        "Organizr Debug Area": "Obszar debugowania Organizr",
+        "Google Ads": "Reklamy Google",
+        "DB Folder": "Folder DB",
+        "API Folder": "Folder API",
+        "Root Folder": "Folder główny",
+        "Organizr Paths": "Ścieżki Organizr",
+        "Organizr News": "Wiadomości Organizr",
+        "Close Error": "Zamknij błąd",
+        "An Error Occured": "Wystąpił błąd",
+        "Debug Area": "Obszar debugowania",
+        "Tab Local URL": "Lokalny URL karty",
+        "PRELOAD": "PRELOAD",
+        "Use Ombi Alias Names": "Użyj nazw aliasów Ombi",
+        "TV Show Default Request": "Domyślne zgłoszenie Programu TV",
+        "Add to Combined Downloader": "Dodaj do zbiorczego pobierania",
+        "http(s)://hostname:port/xmlrpc": "http(s)://nazwa_hosta:port/xmlrpc",
+        "rTorrent API URL Override": "Nadpisanie URL API rTorrent",
+        "Enable Notify Sounds": "Włącz dźwięki powiadomień",
+        "Remember Me Length": "Okres zapamiętania",
+        "Minimum Authentication for Debug Area": "Minimalne uwierzytelnienie dla obszaru debugowania",
+        "Account DN": "Nazwa DN konta",
+        "Bind Username": "Powiąż nazwę użytkownika",
+        "Account suffix - start with comma - ,ou=people,dc=domain,dc=tld": "Sufiks konta - zacznij od przecinka - ,ou=ludzie,dc=domena,dc=tld",
+        "Account Suffix": "Sufiks konta",
+        "Account prefix - i.e. Controller\\ from Controller\\Username for AD - uid= for OpenLDAP": "Prefiks konta - tj. Kontroler\\z Kontrolera\\Nazwa użytkownika dla AD - uid= dla OpenLDAP",
+        "Account Prefix": "Prefiks konta",
+        "LDAP Backend Type": "Typ backendu LDAP",
+        "Strict Plex Friends": "Wyłącznie znajomi z Plex"
     }
 }

+ 7 - 0
js/version.json

@@ -152,5 +152,12 @@
     "new": "Auto Close and Auto reload feature (#1071)",
     "fixed": "Undefined index dbLocation (#1093)|Disable show update to new version if on docker|Ombi sso only works with full email as user id (#1047)|Clear ajax calls if homepage is closed|Hardcoded news and sponsors branch",
     "notes": "Please report bugs in GitHub issues page"
+  },
+  "2.0.49": {
+    "date": "2019-03-08 19:00",
+    "title": "Plex Recent is back",
+    "new": "Requests now show type of request on hover",
+    "fixed": "Plex homepage items don't redirect to Plex when the tab name has special characters (#1096)|Work around for Plex recentlyAdded api call (#1069)|FormKey issues|Calendar misc text issue",
+    "notes": "Updated language translations|Please report bugs in GitHub issues page"
   }
 }

Some files were not shown because too many files changed in this diff