4
0
Rob Gökemeijer 8 жил өмнө
parent
commit
7a2597a484

+ 3 - 0
api/config/default.php

@@ -70,6 +70,9 @@ return array(
 	'qBittorrentHideCompleted' => false,
 	'qBittorrentSortOrder' => 'eta',
 	'qBittorrentReverseSorting' => false,
+    'homepageCalendarEnabled' => 'true',
+    'homepageCalendarAuth' => '4',
+    'calendariCal' => '',
 	'homepagCustomHTMLoneEnabled' => false,
 	'homepagCustomHTMLoneAuth' => '1',
 	'homepagCustomHTMLtwoEnabled' => false,

+ 144 - 108
api/functions/homepage-connect-functions.php

@@ -815,114 +815,150 @@ function delugeConnect()
 
 function getCalendar()
 {
-	$startDate = date('Y-m-d', strtotime("-" . $GLOBALS['calendarStart'] . " days"));
-	$endDate = date('Y-m-d', strtotime("+" . $GLOBALS['calendarEnd'] . " days"));
-	$calendarItems = array();
-	// SONARR CONNECT
-	if ($GLOBALS['homepageSonarrEnabled'] && qualifyRequest($GLOBALS['homepageSonarrAuth']) && !empty($GLOBALS['sonarrURL']) && !empty($GLOBALS['sonarrToken'])) {
-		$sonarrs = array();
-		$sonarrURLList = explode(',', $GLOBALS['sonarrURL']);
-		$sonarrTokenList = explode(',', $GLOBALS['sonarrToken']);
-		if (count($sonarrURLList) == count($sonarrTokenList)) {
-			foreach ($sonarrURLList as $key => $value) {
-				$sonarrs[$key] = array(
-					'url' => $value,
-					'token' => $sonarrTokenList[$key]
-				);
-			}
-			foreach ($sonarrs as $key => $value) {
-				try {
-					$sonarr = new Kryptonit3\Sonarr\Sonarr($value['url'], $value['token']);
-					$sonarrCalendar = getSonarrCalendar($sonarr->getCalendar($startDate, $endDate, $GLOBALS['sonarrUnmonitored']), $key);
-				} catch (Exception $e) {
-					writeLog('error', 'Sonarr Connect Function - Error: ' . $e->getMessage(), 'SYSTEM');
-				}
-				if (!empty($sonarrCalendar)) {
-					$calendarItems = array_merge($calendarItems, $sonarrCalendar);
-				}
-			}
-		}
-	}
-	// RADARR CONNECT
-	if ($GLOBALS['homepageRadarrEnabled'] && qualifyRequest($GLOBALS['homepageRadarrAuth']) && !empty($GLOBALS['radarrURL']) && !empty($GLOBALS['radarrToken'])) {
-		$radarrs = array();
-		$radarrURLList = explode(',', $GLOBALS['radarrURL']);
-		$radarrTokenList = explode(',', $GLOBALS['radarrToken']);
-		if (count($radarrURLList) == count($radarrTokenList)) {
-			foreach ($radarrURLList as $key => $value) {
-				$radarrs[$key] = array(
-					'url' => $value,
-					'token' => $radarrTokenList[$key]
-				);
-			}
-			foreach ($radarrs as $key => $value) {
-				try {
-					$radarr = new Kryptonit3\Sonarr\Sonarr($value['url'], $value['token']);
-					$radarrCalendar = getRadarrCalendar($radarr->getCalendar($startDate, $endDate), $key, $value['url']);
-				} catch (Exception $e) {
-					writeLog('error', 'Radarr Connect Function - Error: ' . $e->getMessage(), 'SYSTEM');
-				}
-				if (!empty($radarrCalendar)) {
-					$calendarItems = array_merge($calendarItems, $radarrCalendar);
-				}
-			}
-		}
-	}
-	// SICKRAGE/BEARD/MEDUSA CONNECT
-	if ($GLOBALS['homepageSickrageEnabled'] && qualifyRequest($GLOBALS['homepageSickrageAuth']) && !empty($GLOBALS['sickrageURL']) && !empty($GLOBALS['sickrageToken'])) {
-		$sicks = array();
-		$sickURLList = explode(',', $GLOBALS['sickrageURL']);
-		$sickTokenList = explode(',', $GLOBALS['sickrageToken']);
-		if (count($sickURLList) == count($sickTokenList)) {
-			foreach ($sickURLList as $key => $value) {
-				$sicks[$key] = array(
-					'url' => $value,
-					'token' => $sickTokenList[$key]
-				);
-			}
-			foreach ($sicks as $key => $value) {
-				try {
-					$sickrage = new Kryptonit3\SickRage\SickRage($value['url'], $value['token']);
-					$sickrageFuture = getSickrageCalendarWanted($sickrage->future(), $key);
-					$sickrageHistory = getSickrageCalendarHistory($sickrage->history("100", "downloaded"), $key);
-					if (!empty($sickrageFuture)) {
-						$calendarItems = array_merge($calendarItems, $sickrageFuture);
-					}
-					if (!empty($sickrageHistory)) {
-						$calendarItems = array_merge($calendarItems, $sickrageHistory);
-					}
-				} catch (Exception $e) {
-					writeLog('error', 'Sickrage Connect Function - Error: ' . $e->getMessage(), 'SYSTEM');
-				}
-			}
-		}
-	}
-	// COUCHPOTATO CONNECT
-	if ($GLOBALS['homepageCouchpotatoEnabled'] && qualifyRequest($GLOBALS['homepageCouchpotatoAuth']) && !empty($GLOBALS['couchpotatoURL']) && !empty($GLOBALS['couchpotatoToken'])) {
-		$couchs = array();
-		$couchpotatoURLList = explode(',', $GLOBALS['couchpotatoURL']);
-		$couchpotatoTokenList = explode(',', $GLOBALS['couchpotatoToken']);
-		if (count($couchpotatoURLList) == count($couchpotatoTokenList)) {
-			foreach ($couchpotatoURLList as $key => $value) {
-				$couchs[$key] = array(
-					'url' => $value,
-					'token' => $couchpotatoTokenList[$key]
-				);
-			}
-			foreach ($couchs as $key => $value) {
-				try {
-					$couchpotato = new Kryptonit3\CouchPotato\CouchPotato($value['url'], $value['token']);
-					$couchCalendar = getCouchCalendar($couchpotato->getMediaList(), $key);
-					if (!empty($couchCalendar)) {
-						$calendarItems = array_merge($calendarItems, $couchCalendar);
-					}
-				} catch (Exception $e) {
-					writeLog('error', 'Sickrage Connect Function - Error: ' . $e->getMessage(), 'SYSTEM');
-				}
-			}
-		}
-	}
-	return ($calendarItems) ? $calendarItems : false;
+    $startDate = date('Y-m-d', strtotime("-" . $GLOBALS['calendarStart'] . " days"));
+    $endDate = date('Y-m-d', strtotime("+" . $GLOBALS['calendarEnd'] . " days"));
+    $icalCalendarSources = array();
+    $calendarItems = array();
+    // SONARR CONNECT
+    if ($GLOBALS['homepageSonarrEnabled'] && qualifyRequest($GLOBALS['homepageSonarrAuth']) && !empty($GLOBALS['sonarrURL']) && !empty($GLOBALS['sonarrToken'])) {
+        $sonarrs = array();
+        $sonarrURLList = explode(',', $GLOBALS['sonarrURL']);
+        $sonarrTokenList = explode(',', $GLOBALS['sonarrToken']);
+        if (count($sonarrURLList) == count($sonarrTokenList)) {
+            foreach ($sonarrURLList as $key => $value) {
+                $sonarrs[$key] = array(
+                    'url' => $value,
+                    'token' => $sonarrTokenList[$key]
+                );
+            }
+            foreach ($sonarrs as $key => $value) {
+                try {
+                    $sonarr = new Kryptonit3\Sonarr\Sonarr($value['url'], $value['token']);
+                    $sonarrCalendar = getSonarrCalendar($sonarr->getCalendar($startDate, $endDate), $key);
+                } catch (Exception $e) {
+                    writeLog('error', 'Sonarr Connect Function - Error: ' . $e->getMessage(), 'SYSTEM');
+                }
+                if (!empty($sonarrCalendar)) {
+                    $calendarItems = array_merge($calendarItems, $sonarrCalendar);
+                }
+            }
+        }
+    }
+    // RADARR CONNECT
+    if ($GLOBALS['homepageRadarrEnabled'] && qualifyRequest($GLOBALS['homepageRadarrAuth']) && !empty($GLOBALS['radarrURL']) && !empty($GLOBALS['radarrToken'])) {
+        $radarrs = array();
+        $radarrURLList = explode(',', $GLOBALS['radarrURL']);
+        $radarrTokenList = explode(',', $GLOBALS['radarrToken']);
+        if (count($radarrURLList) == count($radarrTokenList)) {
+            foreach ($radarrURLList as $key => $value) {
+                $radarrs[$key] = array(
+                    'url' => $value,
+                    'token' => $radarrTokenList[$key]
+                );
+            }
+            foreach ($radarrs as $key => $value) {
+                try {
+                    $radarr = new Kryptonit3\Sonarr\Sonarr($value['url'], $value['token']);
+                    $radarrCalendar = getRadarrCalendar($radarr->getCalendar($startDate, $endDate), $key, $value['url']);
+                } catch (Exception $e) {
+                    writeLog('error', 'Radarr Connect Function - Error: ' . $e->getMessage(), 'SYSTEM');
+                }
+                if (!empty($radarrCalendar)) {
+                    $calendarItems = array_merge($calendarItems, $radarrCalendar);
+                }
+            }
+        }
+    }
+    // SICKRAGE/BEARD/MEDUSA CONNECT
+    if ($GLOBALS['homepageSickrageEnabled'] && qualifyRequest($GLOBALS['homepageSickrageAuth']) && !empty($GLOBALS['sickrageURL']) && !empty($GLOBALS['sickrageToken'])) {
+        $sicks = array();
+        $sickURLList = explode(',', $GLOBALS['sickrageURL']);
+        $sickTokenList = explode(',', $GLOBALS['sickrageToken']);
+        if (count($sickURLList) == count($sickTokenList)) {
+            foreach ($sickURLList as $key => $value) {
+                $sicks[$key] = array(
+                    'url' => $value,
+                    'token' => $sickTokenList[$key]
+                );
+            }
+            foreach ($sicks as $key => $value) {
+                try {
+                    $sickrage = new Kryptonit3\SickRage\SickRage($value['url'], $value['token']);
+                    $sickrageFuture = getSickrageCalendarWanted($sickrage->future(), $key);
+                    $sickrageHistory = getSickrageCalendarHistory($sickrage->history("100", "downloaded"), $key);
+                    if (!empty($sickrageFuture)) {
+                        $calendarItems = array_merge($calendarItems, $sickrageFuture);
+                    }
+                    if (!empty($sickrageHistory)) {
+                        $calendarItems = array_merge($calendarItems, $sickrageHistory);
+                    }
+                } catch (Exception $e) {
+                    writeLog('error', 'Sickrage Connect Function - Error: ' . $e->getMessage(), 'SYSTEM');
+                }
+            }
+        }
+    }
+    // COUCHPOTATO CONNECT
+    if ($GLOBALS['homepageCouchpotatoEnabled'] && qualifyRequest($GLOBALS['homepageCouchpotatoAuth']) && !empty($GLOBALS['couchpotatoURL']) && !empty($GLOBALS['couchpotatoToken'])) {
+        $couchs = array();
+        $couchpotatoURLList = explode(',', $GLOBALS['couchpotatoURL']);
+        $couchpotatoTokenList = explode(',', $GLOBALS['couchpotatoToken']);
+        if (count($couchpotatoURLList) == count($couchpotatoTokenList)) {
+            foreach ($couchpotatoURLList as $key => $value) {
+                $couchs[$key] = array(
+                    'url' => $value,
+                    'token' => $couchpotatoTokenList[$key]
+                );
+            }
+            foreach ($couchs as $key => $value) {
+                try {
+                    $couchpotato = new Kryptonit3\CouchPotato\CouchPotato($value['url'], $value['token']);
+                    $couchCalendar = getCouchCalendar($couchpotato->getMediaList(), $key);
+                    if (!empty($couchCalendar)) {
+                        $calendarItems = array_merge($calendarItems, $couchCalendar);
+                    }
+                } catch (Exception $e) {
+                    writeLog('error', 'Sickrage Connect Function - Error: ' . $e->getMessage(), 'SYSTEM');
+                }
+            }
+        }
+    }
+    // iCal URL
+    $icalEvents = array();
+    if ($GLOBALS['homepageCalendarEnabled'] && qualifyRequest($GLOBALS['homepageCalendarAuth']) && !empty($GLOBALS['calendariCal'])) {
+        $calendars = array();
+        $calendarURLList = explode(',', $GLOBALS['calendariCal']);
+        foreach ($calendarURLList as $key => $value) {
+            $icsEvents = getIcsEventsAsArray($value);
+            $timeZone = trim($icsEvents [1] ['X-WR-TIMEZONE']);
+            unset($icsEvents [1]);
+            foreach ($icsEvents as $icsEvent) {
+                if (isset($icsEvent['DTSTART']) && isset($icsEvent['DTEND']) && isset($icsEvent['SUMMARY'])) {
+                    /* Getting start date and time */
+                    $start = isset($icsEvent ['DTSTART;VALUE=DATE']) ? $icsEvent ['DTSTART;VALUE=DATE'] : $icsEvent ['DTSTART'];
+                    /* Converting to datetime and apply the timezone to get proper date time */
+                    $startDt = new DateTime ($start);
+                    $startDt->setTimeZone(new DateTimezone ($timeZone));
+                    $startDate = $startDt->format(DateTime::ATOM);
+                    /* Getting end date with time */
+                    $end = isset($icsEvent ['DTEND;VALUE=DATE']) ? $icsEvent ['DTEND;VALUE=DATE'] : $icsEvent ['DTEND'];
+                    $endDt = new DateTime ($end);
+                    $endDate = $endDt->format(DateTime::ATOM);
+                    /* Getting the name of event */
+                    $eventName = $icsEvent['SUMMARY'];
+                    $icalEvents[] = array(
+                        'title' => $eventName,
+                        'start' => $startDate,
+                        'end' => $endDate
+                    );
+                }
+            }
+        }
+    }
+
+    $calendarSources['events'] = $calendarItems;
+    $calendarSources['ical'] = $icalEvents;
+    return ($calendarSources) ? $calendarSources : false;
 }
 
 function getSonarrCalendar($array, $number)

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 651 - 570
api/functions/homepage-functions.php


+ 38 - 0
api/functions/normal-functions.php

@@ -428,3 +428,41 @@ function getServer($over = false)
 	}
 	return isset($_SERVER["HTTP_HOST"]) ? $_SERVER["HTTP_HOST"] : $_SERVER["SERVER_NAME"];
 }
+
+/* Function is to get all the contents from ics and explode all the datas according to the events and its sections */
+function getIcsEventsAsArray($file)
+{
+    if ($icalString = @file_get_contents($file)) {
+        $icsDates = array();
+        /* Explode the ICs Data to get datas as array according to string ‘BEGIN:’ */
+        $icsData = explode("BEGIN:", $icalString);
+        /* Iterating the icsData value to make all the start end dates as sub array */
+        foreach ($icsData as $key => $value) {
+            $icsDatesMeta [$key] = explode("\n", $value);
+        }
+        /* Itearting the Ics Meta Value */
+        foreach ($icsDatesMeta as $key => $value) {
+            foreach ($value as $subKey => $subValue) {
+                /* to get ics events in proper order */
+                $icsDates = getICSDates($key, $subKey, $subValue, $icsDates);
+            }
+        }
+        return $icsDates;
+    } else {
+        return false;
+    }
+}
+
+/* funcion is to avaid the elements wich is not having the proper start, end  and summary informations */
+function getICSDates($key, $subKey, $subValue, $icsDates)
+{
+    if ($key != 0 && $subKey == 0) {
+        $icsDates [$key] ["BEGIN"] = $subValue;
+    } else {
+        $subValueArr = explode(":", $subValue, 2);
+        if (isset ($subValueArr [1])) {
+            $icsDates [$key] [$subValueArr [0]] = $subValueArr [1];
+        }
+    }
+    return $icsDates;
+}

+ 21 - 15
js/functions.js

@@ -99,8 +99,8 @@ function timerIncrement() {
 			//do nothing
 		}else{
 			location.reload();
-		};
-	}
+        }
+    }
 }
 function ajaxloader(element=null, action='out'){
 	var loader = `
@@ -818,8 +818,10 @@ function buildFormGroup(array){
 					override = v.override;
 				}
 				count++;
-				if(count%2 !== 0 ){ group += '<div class="row start">'; };
-				group += `
+                if (count % 2 !== 0) {
+                    group += '<div class="row start">';
+                }
+                group += `
 					<!-- INPUT BOX -->
 					<div class="col-md-`+override+` p-b-10">
 						<div class="form-group">
@@ -831,8 +833,10 @@ function buildFormGroup(array){
 					</div>
 					<!--/ INPUT BOX -->
 				`;
-				if(count%2 == 0 || count == total ){ group += '</div><!--end-->'; };
-			});
+                if (count % 2 == 0 || count == total) {
+                    group += '</div><!--end-->';
+                }
+            });
 			group += '</div>';
 		}
 	});
@@ -902,8 +906,7 @@ function buildSSO(){
 	organizrAPI('GET','api/?v1/sso').success(function(data) {
 		var response = JSON.parse(data);
 		$('#sso-form').html(buildFormGroup(response.data));
-		;
-	}).fail(function(xhr) {
+    }).fail(function (xhr) {
 		console.error("Organizr Function: API Connection Failed");
 	});
 }
@@ -1316,7 +1319,7 @@ function buildTabTypeSelect(tabID, typeID){
 			'type_id':2,
 			'type':'New Window'
 		}
-	]
+    ];
 	var typeSelect = '';
 	var selected = '';
 	$.each(array, function(i,v) {
@@ -1525,7 +1528,7 @@ function submitSettingsForm(form){
 
     }
     if(size > 0){
-        console.log(submit)
+        console.log(submit);
         settingsAPI(post,callbacks);
         $("#"+form+" :input").each(function(){
             var input = $(this);
@@ -2165,7 +2168,7 @@ $.urlParam = function(name){
     else{
        return decodeURI(results[1]) || 0;
     }
-}
+};
 function errorPage(error=null){
 	if(error){
 		local('set','error',error);
@@ -3329,7 +3332,7 @@ function buildMetadata(array, source){
 			rating = `<div class="col-xs-2 p-10"><div data-label="`+v.metadata.rating *10+`%" class="css-bar css-bar-`+Math.ceil(ratingRound/5)*5+` css-bar-sm m-b-0  css-bar-info"><img src="plugins/images/rotten.png" class="nowPlayingUserThumb" alt="User"></div></div>`;
 		}
 		var seconds = v.metadata.duration / 1000 ; // or "2000"
-		seconds = parseInt(seconds) //because moment js dont know to handle number in string format
+        seconds = parseInt(seconds); //because moment js dont know to handle number in string format
 		var format =  Math.floor(moment.duration(seconds,'seconds').asHours()) + ':' + moment.duration(seconds,'seconds').minutes() + ':' + moment.duration(seconds,'seconds').seconds();
 		metadata = `
 		<div class="white-box m-b-0">
@@ -3388,7 +3391,7 @@ function buildCalendarMetadata(array){
 			rating = `<div class="col-xs-2 p-10"><div data-label="`+array.ratings *10+`%" class="css-bar css-bar-`+Math.ceil(ratingRound/5)*5+` css-bar-sm m-b-0  css-bar-info"><img src="plugins/images/rotten.png" class="nowPlayingUserThumb" alt="User"></div></div>`;
 		}
 		var seconds = array.runtime / 1000 ; // or "2000"
-		seconds = parseInt(seconds) //because moment js dont know to handle number in string format
+    seconds = parseInt(seconds); //because moment js dont know to handle number in string format
 		var format =  Math.floor(moment.duration(seconds,'seconds').asHours()) + ':' + moment.duration(seconds,'seconds').minutes() + ':' + moment.duration(seconds,'seconds').seconds();
 		metadata = `
 		<div class="white-box m-b-0">
@@ -3573,9 +3576,12 @@ function homepageCalendar(timeout){
         $('.fc-toolbar').addClass('fc-alternate');
     }
 	organizrAPI('POST','api/?v1/homepage/connect',{action:'getCalendar'}).success(function(data) {
+        console.log(data);
 		var response = JSON.parse(data);
+        console.log(response.data);
         $('#calendar').fullCalendar('removeEvents');
-        $('#calendar').fullCalendar('addEventSource', response.data);
+        $('#calendar').fullCalendar('addEventSource', response.data.events);
+        $('#calendar').fullCalendar('addEventSource', response.data.ical);
 		response = '';
 	}).fail(function(xhr) {
 		console.error("Organizr Function: API Connection Failed");
@@ -3704,7 +3710,7 @@ function inlineLoad(){
 	   },
 	   close: function() {
 		  if(typeof player !== 'undefined'){
-			  console.log('STOP STOP STOP')
+              console.log('STOP STOP STOP');
 			  player.destroy();
 		  }
 		}

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно