Преглед изворни кода

Merge pull request #1796 from jessehickman/patch-10

Expanding calendar link to target existing tab + on/off switch + series name conversion fixes
causefx пре 4 година
родитељ
комит
ef4556a647

+ 9 - 0
api/config/default.php

@@ -85,6 +85,9 @@ return [
 	'komgaFallbackPassword' => '',
 	'sonarrURL' => '',
 	'sonarrUnmonitored' => false,
+	'sonarrIcon' => true,
+	'sonarrCalendarLink' => '',
+	'sonarrFrameTarget' => '',
 	'sonarrToken' => '',
 	'sonarrSocksEnabled' => false,
 	'sonarrSocksAuth' => '999',
@@ -96,8 +99,14 @@ return [
 	'lidarrSocksAuth' => '999',
 	'lidarrDisableCertCheck' => false,
 	'lidarrUseCustomCertificate' => false,
+	'lidarrIcon' => true,
+	'lidarrCalendarLink' => '',
+	'lidarrFrameTarget' => '',
 	'radarrURL' => '',
 	'radarrUnmonitored' => false,
+	'radarrIcon' => true,
+	'radarrCalendarLink' => '',
+	'radarrFrameTarget' => '',
 	'radarrPhysicalRelease' => true,
 	'radarrDigitalRelease' => false,
 	'radarrCinemaRelease' => false,

+ 44 - 0
api/functions/option-functions.php

@@ -461,6 +461,14 @@ trait OptionsFunction
 					'options' => $this->makeOptionsFromValues($this->config[str_replace('CalendarLink','',$name).'URL'], true, 'Use Default'),
 				];
 				break;
+			case 'calendarframetarget':
+				$settingMerge = [
+					'type' => 'select',
+					'label' => 'Target Tab',
+					'help' => 'Set the tab used when clicking on calendar icon. If not set, link will open in new window.',
+					'options' => $this->getIframeTabs($this->config[str_replace('FrameTarget','CalendarLink',$name)])
+				];
+				break;
 			default:
 				$settingMerge = [
 					'type' => strtolower($type),
@@ -476,6 +484,42 @@ trait OptionsFunction
 		}
 		return $setting;
 	}
+	
+	public function getIframeTabs($url = "")
+	{	
+		if (!empty($url)){
+			$response = [
+				array(
+					'function' => 'fetchAll',
+					'query' => array(
+						"SELECT * FROM tabs WHERE `enabled`='1' AND `type`='1' AND `group_id`>=? AND (`url` = '" . $url . "' OR `url_local` = '" . $url . "') ORDER BY `order` ASC",
+						$this->getUserLevel(),
+					)
+				)
+			];
+		} else {
+			$response = [
+				array(
+					'function' => 'fetchAll',
+					'query' => array(
+						"SELECT * FROM tabs WHERE `enabled`='1' AND `type`='1' AND `group_id`>=? ORDER BY `order` ASC",
+						$this->getUserLevel()
+					)
+				)
+			];
+		}
+		$formattedValues[] = [
+			'name' => 'Open in New Window',
+			'value' => ''
+		];
+		foreach($this->processQueries($response) as $result) {
+			$formattedValues[] = [
+				'name' => $result['name'],
+				'value' => $result['name']
+			];
+		}
+		return $formattedValues;
+	}
 
 	public function makeOptionsFromValues($values = null, $appendBlank = null, $blankLabel = null)
 	{

+ 9 - 2
api/homepage/lidarr.php

@@ -33,7 +33,7 @@ trait LidarrHomepageItem
 					$this->settingsOption('enable', 'lidarrSocksEnabled'),
 					$this->settingsOption('auth', 'lidarrSocksAuth'),
 				],
-				'Misc Options' => [
+				'Calendar' => [
 					$this->settingsOption('calendar-start', 'calendarStart'),
 					$this->settingsOption('calendar-end', 'calendarEnd'),
 					$this->settingsOption('calendar-starting-day', 'calendarFirstDay'),
@@ -41,8 +41,13 @@ trait LidarrHomepageItem
 					$this->settingsOption('calendar-time-format', 'calendarTimeFormat'),
 					$this->settingsOption('calendar-locale', 'calendarLocale'),
 					$this->settingsOption('calendar-limit', 'calendarLimit'),
-					$this->settingsOption('refresh', 'calendarRefresh'),
+					$this->settingsOption('refresh', 'calendarRefresh'),					
+					$this->settingsOption('blank', '', ['type' => 'html', 'html' => '<hr />']),
+					$this->settingsOption('blank', '', ['type' => 'html', 'html' => '<hr />']),
+					$this->settingsOption('enable', 'lidarrIcon', ['label' => 'Show Lidarr Icon']),
 					$this->settingsOption('calendar-link-url', 'lidarrCalendarLink'),
+					$this->settingsOption('blank'),
+					$this->settingsOption('calendar-frame-target', 'lidarrFrameTarget')
 				],
 				'Test Connection' => [
 					$this->settingsOption('blank', null, ['label' => 'Please Save before Testing']),
@@ -263,6 +268,8 @@ trait LidarrHomepageItem
 				"genres" => $child['genres'],
 				"href" => strtolower($href),
 				"icon" => "/plugins/images/tabs/lidarr.png",
+				"frame" => $this->config['lidarrFrameTarget'],
+				"showLink" => $this->config['lidarrIcon']
 			);
 			array_push($gotCalendar, array(
 				"id" => "Lidarr-" . $number . "-" . $i,

+ 8 - 2
api/homepage/radarr.php

@@ -48,12 +48,16 @@ trait RadarrHomepageItem
 					$this->settingsOption('calendar-locale', 'calendarLocale'),
 					$this->settingsOption('calendar-limit', 'calendarLimit'),
 					$this->settingsOption('refresh', 'calendarRefresh'),
-					$this->settingsOption('calendar-link-url', 'radarrCalendarLink'),
-					$this->settingsOption('blank', null),
 					$this->settingsOption('switch', 'radarrUnmonitored', ['label' => 'Show Unmonitored']),
 					$this->settingsOption('switch', 'radarrPhysicalRelease', ['label' => 'Show Physical Releases']),
 					$this->settingsOption('switch', 'radarrDigitalRelease', ['label' => 'Show Digital Releases']),
 					$this->settingsOption('switch', 'radarrCinemaRelease', ['label' => 'Show Cinema Releases']),
+					$this->settingsOption('blank', '', ['type' => 'html', 'html' => '<hr />']),
+					$this->settingsOption('blank', '', ['type' => 'html', 'html' => '<hr />']),
+					$this->settingsOption('enable', 'radarrIcon', ['label' => 'Show Radarr Icon'),
+					$this->settingsOption('calendar-link-url', 'radarrCalendarLink'),
+					$this->settingsOption('blank'),
+					$this->settingsOption('calendar-frame-target', 'radarrFrameTarget')
 				],
 				'Test Connection' => [
 					$this->settingsOption('blank', null, ['label' => 'Please Save before Testing']),
@@ -351,6 +355,8 @@ trait RadarrHomepageItem
 					"studio" => $child['studio'] ?? '',
 					"href" => strtolower($href),
 					"icon" => "/plugins/images/tabs/radarr.png",
+					"frame" => $this->config['radarrFrameTarget'],
+					"showLink" => $this->config['radarrIcon']
 				);
 				array_push($gotCalendar, array(
 					"id" => "Radarr-" . $number . "-" . $i,

+ 12 - 4
api/homepage/sonarr.php

@@ -52,8 +52,14 @@ trait SonarrHomepageItem
 					$this->settingsOption('calendar-locale', 'calendarLocale'),
 					$this->settingsOption('calendar-limit', 'calendarLimit'),
 					$this->settingsOption('refresh', 'calendarRefresh'),
-					$this->settingsOption('calendar-link-url', 'sonarrCalendarLink'),
+					$this->settingsOption('blank'),
 					$this->settingsOption('switch', 'sonarrUnmonitored', ['label' => 'Show Unmonitored']),
+					$this->settingsOption('blank', '', ['type' => 'html', 'html' => '<hr />']),
+					$this->settingsOption('blank', '', ['type' => 'html', 'html' => '<hr />']),
+					$this->settingsOption('enable', 'sonarrIcon', ['label' => 'Show Sonarr Icon'),
+					$this->settingsOption('calendar-link-url', 'sonarrCalendarLink'),
+					$this->settingsOption('blank'),
+					$this->settingsOption('calendar-frame-target', 'sonarrFrameTarget')									
 				],
 				'Test Connection' => [
 					$this->settingsOption('blank', null, ['label' => 'Please Save before Testing']),
@@ -295,9 +301,9 @@ trait SonarrHomepageItem
 				$href_arr = explode(',', $this->config['sonarrURL']);
 				$href = reset($href_arr);
 			}
-			if (!empty($href)) {
-				$href = $href . '/series/' . preg_replace('/[^A-Za-z0-9. -]/', '', preg_replace('/[[:space:]]+/', '-', $seriesName));
-				$href = str_replace("//series/", "/series/", $href);
+			if (!empty($href)){
+				$href = $href . '/series/' . preg_replace('/[^A-Za-z0-9 -]/', '', str_replace('&', 'and', preg_replace('/[[:space:]]+/', '-', $seriesName)));
+				$href = str_replace("//series/","/series/",$href);
 			}
 			$details = array(
 				"seasonCount" => $child['series']['seasonCount'] ?? isset($child['series']['seasons']) ? count($child['series']['seasons']) : 0,
@@ -316,6 +322,8 @@ trait SonarrHomepageItem
 				"genres" => $child['series']['genres'],
 				"href" => strtolower($href),
 				"icon" => "/plugins/images/tabs/sonarr.png",
+				"frame" => $this->config['sonarrFrameTarget'],
+				"showLink" => $this->config['sonarrIcon']
 			);
 			array_push($gotCalendar, array(
 				"id" => "Sonarr-" . $number . "-" . $i,

+ 17 - 7
js/functions.js

@@ -967,7 +967,7 @@ function closeCurrentTab(event){
 			organizrConsole('Tab Function','No Available Tab to open', 'error');
 	}
 }
-function tabActions(event,name, type){
+function tabActions(event, name, type, redirectURL = ""){
 	if(event.which == 3){
 		return false;
 	}
@@ -989,6 +989,10 @@ function tabActions(event,name, type){
 		if(type !== 2){
 			$('.splash-screen').removeClass('in').addClass('hidden');
 		}
+		if (redirectURL){
+			$('.close-popup').trigger('click');
+			$('#frame-'+cleanClass(name)).attr('src',redirectURL);
+		}
 	}
 }
 function reverseObject(object) {
@@ -6975,12 +6979,18 @@ function buildYoutubeLink(title){
 		`;
 	}
 }
-function buildPVRLink(href, ico){
-	if (href){
+function buildPVRLink(href, ico = "", frame = "", showLink = true){
+	if (href && showLink){
 		var styleOverride = `width:55px;height:44px;background-image: url(${ico});background-repeat:no-repeat;background-size:25px;background-position:center;`;
-		return `
-		<div class="btn btn-inverse waves-effect waves-light" type="button" onclick="window.open('${href}')" style="${styleOverride}"></div>
-		`;
+		if (frame){
+			return `
+			<div class="btn btn-inverse waves-effect waves-light" type="button" onclick="tabActions(0,'${frame}',1,'${href}');" style="${styleOverride}"></div>
+			`;
+		} else {
+			return `
+			<div class="btn btn-inverse waves-effect waves-light" type="button" onclick="window.open('${href}')" style="${styleOverride}"></div>
+			`;
+		}
 	} else {
 		return `
 		 
@@ -7013,7 +7023,7 @@ function buildCalendarMetadata(array){
 	                <h2 class="m-b-0 font-medium pull-right text-right">
 						`+array.topTitle+`<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">`+array.bottomTitle+`</small><br>
-						`+buildPVRLink(array.href, array.icon)+buildYoutubeLink(array.topTitle)+`
+						`+buildPVRLink(array.href, array.icon, array.frame, array.showLink)+buildYoutubeLink(array.topTitle)+`
 					</h2>
 	            </div>
 				<div class="genre-list p-10">`+genres+`</div>