Переглянути джерело

Merge pull request #863 from rob1998/v2-develop

Calendar Work
causefx 8 роки тому
батько
коміт
991bf5a8dd

+ 5 - 2
api/config/default.php

@@ -70,6 +70,9 @@ return array(
 	'qBittorrentHideCompleted' => false,
 	'qBittorrentHideCompleted' => false,
 	'qBittorrentSortOrder' => 'eta',
 	'qBittorrentSortOrder' => 'eta',
 	'qBittorrentReverseSorting' => false,
 	'qBittorrentReverseSorting' => false,
+    'homepageCalendarEnabled' => 'true',
+    'homepageCalendarAuth' => '4',
+    'calendariCal' => '',
 	'homepagCustomHTMLoneEnabled' => false,
 	'homepagCustomHTMLoneEnabled' => false,
 	'homepagCustomHTMLoneAuth' => '1',
 	'homepagCustomHTMLoneAuth' => '1',
 	'homepagCustomHTMLtwoEnabled' => false,
 	'homepagCustomHTMLtwoEnabled' => false,
@@ -143,6 +146,6 @@ return array(
 	'mediaSearch' => false,
 	'mediaSearch' => false,
 	'mediaSearchType' => '',
 	'mediaSearchType' => '',
 	'mediaSearchAuth' => '1',
 	'mediaSearchAuth' => '1',
-	'registrationPassword' => '',
-	'hideRegistration' => false
+    'registrationPassword' => '',
+    'hideRegistration' => false
 );
 );

+ 3 - 3
api/functions/auth-functions.php

@@ -1,9 +1,9 @@
 <?php
 <?php
 function authRegister($username, $password, $defaults, $email)
 function authRegister($username, $password, $defaults, $email)
 {
 {
-	if ($GLOBALS['authBackend'] !== '') {
-		ombiImport($GLOBALS['authBackend']);
-	}
+    if ($GLOBALS['authBackend'] !== '') {
+        ombiImport($GLOBALS['authBackend']);
+    }
 	if (createUser($username, $password, $defaults, $email)) {
 	if (createUser($username, $password, $defaults, $email)) {
 		writeLog('success', 'Registration Function - A User has registered', $username);
 		writeLog('success', 'Registration Function - A User has registered', $username);
 		if ($GLOBALS['PHPMAILER-enabled']) {
 		if ($GLOBALS['PHPMAILER-enabled']) {

+ 175 - 136
api/functions/homepage-connect-functions.php

@@ -815,114 +815,153 @@ function delugeConnect()
 
 
 function getCalendar()
 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
+    if ($GLOBALS['homepageCalendarEnabled'] && qualifyRequest($GLOBALS['homepageCalendarAuth']) && !empty($GLOBALS['calendariCal'])) {
+        $calendars = array();
+        $calendarURLList = explode(',', $GLOBALS['calendariCal']);
+        $icalEvents = array();
+        foreach ($calendarURLList as $key => $value) {
+            $icsEvents = getIcsEventsAsArray($value);
+
+            if (isset($icsEvents) && !empty($icsEvents)) {
+                $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['ical'] = $icalEvents;
+    }
+
+    $calendarSources['events'] = $calendarItems;
+    return ($calendarSources) ? $calendarSources : false;
 }
 }
 
 
 function getSonarrCalendar($array, $number)
 function getSonarrCalendar($array, $number)
@@ -1467,34 +1506,34 @@ function ombiAPI($array)
 
 
 function ombiImport($type = null)
 function ombiImport($type = null)
 {
 {
-	if (!empty($GLOBALS['ombiURL']) && !empty($GLOBALS['ombiToken']) && !empty($type)) {
-		try {
-			$url = qualifyURL($GLOBALS['ombiURL']);
-			$headers = array(
-				"Accept" => "application/json",
-				"Content-Type" => "application/json",
-				"Apikey" => $GLOBALS['ombiToken']
-			);
-			$options = (localURL($url)) ? array('verify' => false) : array();
-			switch ($type) {
-				case 'emby':
-					$response = Requests::get($url . "/api/v1/Job/embyuserimporter", $headers, $options);
-					break;
-				case 'plex':
-					$response = Requests::get($url . "/api/v1/Job/plexuserimporter", $headers, $options);
-					break;
-				default:
-					break;
-			}
-			if ($response->success) {
-				writeLog('success', 'OMBI Connect Function - Ran User Import', 'SYSTEM');
-				return true;
-			}
-		} catch (Requests_Exception $e) {
-			writeLog('error', 'OMBI Connect Function - Error: ' . $e->getMessage(), 'SYSTEM');
-		};
-	}
-	return false;
+    if (!empty($GLOBALS['ombiURL']) && !empty($GLOBALS['ombiToken']) && !empty($type)) {
+        try {
+            $url = qualifyURL($GLOBALS['ombiURL']);
+            $headers = array(
+                "Accept" => "application/json",
+                "Content-Type" => "application/json",
+                "Apikey" => $GLOBALS['ombiToken']
+            );
+            $options = (localURL($url)) ? array('verify' => false) : array();
+            switch ($type) {
+                case 'emby':
+                    $response = Requests::get($url . "/api/v1/Job/embyuserimporter", $headers, $options);
+                    break;
+                case 'plex':
+                    $response = Requests::get($url . "/api/v1/Job/plexuserimporter", $headers, $options);
+                    break;
+                default:
+                    break;
+            }
+            if ($response->success) {
+                writeLog('success', 'OMBI Connect Function - Ran User Import', 'SYSTEM');
+                return true;
+            }
+        } catch (Requests_Exception $e) {
+            writeLog('error', 'OMBI Connect Function - Error: ' . $e->getMessage(), 'SYSTEM');
+        };
+    }
+    return false;
 }
 }
 
 
 function ombiAction($id, $action, $type)
 function ombiAction($id, $action, $type)

Різницю між файлами не показано, бо вона завелика
+ 648 - 568
api/functions/homepage-functions.php


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

@@ -428,3 +428,57 @@ function getServer($over = false)
 	}
 	}
 	return isset($_SERVER["HTTP_HOST"]) ? $_SERVER["HTTP_HOST"] : $_SERVER["SERVER_NAME"];
 	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)
+{
+    $icalString = file_get_contents_curl($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;
+}
+
+/* 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;
+}
+
+function file_get_contents_curl($url)
+{
+
+    $ch = curl_init();
+
+    curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
+    curl_setopt($ch, CURLOPT_HEADER, 0);
+    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+    curl_setopt($ch, CURLOPT_URL, $url);
+    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
+    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
+    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
+
+    $data = curl_exec($ch);
+    curl_close($ch);
+
+    return $data;
+
+}

+ 9 - 9
api/functions/organizr-functions.php

@@ -414,12 +414,12 @@ function getSettingsMain()
 				'label' => 'Registration Password',
 				'label' => 'Registration Password',
 				'value' => $GLOBALS['registrationPassword'],
 				'value' => $GLOBALS['registrationPassword'],
 			),
 			),
-			array(
-				'type' => 'switch',
-				'name' => 'hideRegistration',
-				'label' => 'Hide Registration',
-				'value' => $GLOBALS['hideRegistration']
-			)
+            array(
+                'type' => 'switch',
+                'name' => 'hideRegistration',
+                'label' => 'Hide Registration',
+                'value' => $GLOBALS['hideRegistration']
+            )
 		)
 		)
 	);
 	);
 }
 }
@@ -893,9 +893,9 @@ function logoOrText()
 
 
 function showLogin()
 function showLogin()
 {
 {
-	if ($GLOBALS['hideRegistration'] == false) {
-		return '<p><span lang="en">Don\'t have an account?</span><a href="#" class="text-primary m-l-5 to-register"><b lang="en">Sign Up</b></a></p>';
-	}
+    if ($GLOBALS['hideRegistration'] == false) {
+        return '<p><span lang="en">Don\'t have an account?</span><a href="#" class="text-primary m-l-5 to-register"><b lang="en">Sign Up</b></a></p>';
+    }
 }
 }
 
 
 function getImages()
 function getImages()

+ 1 - 1
api/plugins/php-mailer.php

@@ -170,7 +170,7 @@ function phpmSendEmail($emailInfo)
 		if ($GLOBALS['PHPMAILER-smtpHostType'] !== 'n/a') {
 		if ($GLOBALS['PHPMAILER-smtpHostType'] !== 'n/a') {
 			$mail->SMTPSecure = $GLOBALS['PHPMAILER-smtpHostType'];
 			$mail->SMTPSecure = $GLOBALS['PHPMAILER-smtpHostType'];
 		}
 		}
-		$mail->SMTPAuth = $GLOBALS['PHPMAILER-smtpHostAuth'];
+        $mail->SMTPAuth = $GLOBALS['PHPMAILER-smtpHostAuth'];
 		$mail->Username = $GLOBALS['PHPMAILER-smtpHostUsername'];
 		$mail->Username = $GLOBALS['PHPMAILER-smtpHostUsername'];
 		$mail->Password = decrypt($GLOBALS['PHPMAILER-smtpHostPassword']);
 		$mail->Password = decrypt($GLOBALS['PHPMAILER-smtpHostPassword']);
 		$mail->SMTPOptions = array(
 		$mail->SMTPOptions = array(

+ 7 - 7
js/custom.js

@@ -210,7 +210,7 @@ function pageLoad(){
                 }
                 }
                 this.st.mainClass = this.st.el.attr('data-effect');
                 this.st.mainClass = this.st.el.attr('data-effect');
             },
             },
-            beforeClose: function() {
+            beforeClose: function () {
                 // Callback available since v0.9.0
                 // Callback available since v0.9.0
                 if($.magnificPopup.instance.currItem.inlineElement.find('.rubberBand').length !== 0){
                 if($.magnificPopup.instance.currItem.inlineElement.find('.rubberBand').length !== 0){
                     if(!$.magnificPopup.instance.currItem.inlineElement.find('.rubberBand').hasClass('hidden')){
                     if(!$.magnificPopup.instance.currItem.inlineElement.find('.rubberBand').hasClass('hidden')){
@@ -233,7 +233,7 @@ function pageLoad(){
        },
        },
        close: function() {
        close: function() {
           if(typeof player !== 'undefined'){
           if(typeof player !== 'undefined'){
-              console.log('STOP STOP STOP')
+              console.log('STOP STOP STOP');
               player.destroy();
               player.destroy();
           }
           }
         }
         }
@@ -376,7 +376,7 @@ $(document).on("click", ".reset-button", function(e) {
     if(email !== ''){
     if(email !== ''){
 		var post = {
 		var post = {
 	        email:email
 	        email:email
-		}
+        };
         organizrAPI('POST','api/?v1/recover',post).success(function(data) {
         organizrAPI('POST','api/?v1/recover',post).success(function(data) {
             var html = JSON.parse(data);
             var html = JSON.parse(data);
             if(html.data == true){
             if(html.data == true){
@@ -936,7 +936,7 @@ $(document).on("click", ".editCategory", function () {
         messageBody:'Edited Category '+$('#edit-category-form [name=name]').val(),
         messageBody:'Edited Category '+$('#edit-category-form [name=name]').val(),
         error:'Organizr Function: API Connection Failed'
         error:'Organizr Function: API Connection Failed'
     };
     };
-    console.log(post)
+    console.log(post);
     if (typeof post.id == 'undefined' || post.id == '') {
     if (typeof post.id == 'undefined' || post.id == '') {
         message('Edit Tab Error',' Could not get Tab ID','bottom-right','#FFF','error','5000');
         message('Edit Tab Error',' Could not get Tab ID','bottom-right','#FFF','error','5000');
     }
     }
@@ -1279,7 +1279,7 @@ $(document).on("click", ".getPlexMachineSSO", function () {
                             var machine = $(this).attr('machineIdentifier');
                             var machine = $(this).attr('machineIdentifier');
                             machines += '<option value="'+machine+'">'+name+'</option>';
                             machines += '<option value="'+machine+'">'+name+'</option>';
                         }
                         }
-                    })
+                    });
                     var listing = `<select class="form-control" id="ssoPlexMachineSelector" data-type="select">`+machines+`</select>`;
                     var listing = `<select class="form-control" id="ssoPlexMachineSelector" data-type="select">`+machines+`</select>`;
                     $('.ssoPlexMachineListing').html(listing);
                     $('.ssoPlexMachineListing').html(listing);
                 } else {
                 } else {
@@ -1364,7 +1364,7 @@ $(document).on("click", ".getPlexMachineAuth", function () {
                             var machine = $(this).attr('machineIdentifier');
                             var machine = $(this).attr('machineIdentifier');
                             machines += '<option value="'+machine+'">'+name+'</option>';
                             machines += '<option value="'+machine+'">'+name+'</option>';
                         }
                         }
-                    })
+                    });
                     var listing = `<select class="form-control" id="authPlexMachineSelector" data-type="select">`+machines+`</select>`;
                     var listing = `<select class="form-control" id="authPlexMachineSelector" data-type="select">`+machines+`</select>`;
                     $('.authPlexMachineListing').html(listing);
                     $('.authPlexMachineListing').html(listing);
                 } else {
                 } else {
@@ -1394,7 +1394,7 @@ $(document).on("click", ".testPath", function () {
     }else{
     }else{
         organizrAPI('POST','api/?v1/wizard_path',{path:path}).success(function(data) {
         organizrAPI('POST','api/?v1/wizard_path',{path:path}).success(function(data) {
             var html = JSON.parse(data);
             var html = JSON.parse(data);
-            console.log(html)
+            console.log(html);
             if(html.data == true){
             if(html.data == true){
                 message('Path',' Path is good to go','bottom-right','#FFF','success','10000');
                 message('Path',' Path is good to go','bottom-right','#FFF','success','10000');
             }else{
             }else{

+ 21 - 15
js/functions.js

@@ -99,8 +99,8 @@ function timerIncrement() {
 			//do nothing
 			//do nothing
 		}else{
 		}else{
 			location.reload();
 			location.reload();
-		};
-	}
+        }
+    }
 }
 }
 function ajaxloader(element=null, action='out'){
 function ajaxloader(element=null, action='out'){
 	var loader = `
 	var loader = `
@@ -818,8 +818,10 @@ function buildFormGroup(array){
 					override = v.override;
 					override = v.override;
 				}
 				}
 				count++;
 				count++;
-				if(count%2 !== 0 ){ group += '<div class="row start">'; };
-				group += `
+                if (count % 2 !== 0) {
+                    group += '<div class="row start">';
+                }
+                group += `
 					<!-- INPUT BOX -->
 					<!-- INPUT BOX -->
 					<div class="col-md-`+override+` p-b-10">
 					<div class="col-md-`+override+` p-b-10">
 						<div class="form-group">
 						<div class="form-group">
@@ -831,8 +833,10 @@ function buildFormGroup(array){
 					</div>
 					</div>
 					<!--/ INPUT BOX -->
 					<!--/ INPUT BOX -->
 				`;
 				`;
-				if(count%2 == 0 || count == total ){ group += '</div><!--end-->'; };
-			});
+                if (count % 2 == 0 || count == total) {
+                    group += '</div><!--end-->';
+                }
+            });
 			group += '</div>';
 			group += '</div>';
 		}
 		}
 	});
 	});
@@ -902,8 +906,7 @@ function buildSSO(){
 	organizrAPI('GET','api/?v1/sso').success(function(data) {
 	organizrAPI('GET','api/?v1/sso').success(function(data) {
 		var response = JSON.parse(data);
 		var response = JSON.parse(data);
 		$('#sso-form').html(buildFormGroup(response.data));
 		$('#sso-form').html(buildFormGroup(response.data));
-		;
-	}).fail(function(xhr) {
+    }).fail(function (xhr) {
 		console.error("Organizr Function: API Connection Failed");
 		console.error("Organizr Function: API Connection Failed");
 	});
 	});
 }
 }
@@ -1316,7 +1319,7 @@ function buildTabTypeSelect(tabID, typeID){
 			'type_id':2,
 			'type_id':2,
 			'type':'New Window'
 			'type':'New Window'
 		}
 		}
-	]
+    ];
 	var typeSelect = '';
 	var typeSelect = '';
 	var selected = '';
 	var selected = '';
 	$.each(array, function(i,v) {
 	$.each(array, function(i,v) {
@@ -1525,7 +1528,7 @@ function submitSettingsForm(form){
 
 
     }
     }
     if(size > 0){
     if(size > 0){
-        console.log(submit)
+        console.log(submit);
         settingsAPI(post,callbacks);
         settingsAPI(post,callbacks);
         $("#"+form+" :input").each(function(){
         $("#"+form+" :input").each(function(){
             var input = $(this);
             var input = $(this);
@@ -2165,7 +2168,7 @@ $.urlParam = function(name){
     else{
     else{
        return decodeURI(results[1]) || 0;
        return decodeURI(results[1]) || 0;
     }
     }
-}
+};
 function errorPage(error=null){
 function errorPage(error=null){
 	if(error){
 	if(error){
 		local('set','error',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>`;
 			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"
 		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();
 		var format =  Math.floor(moment.duration(seconds,'seconds').asHours()) + ':' + moment.duration(seconds,'seconds').minutes() + ':' + moment.duration(seconds,'seconds').seconds();
 		metadata = `
 		metadata = `
 		<div class="white-box m-b-0">
 		<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>`;
 			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"
 		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();
 		var format =  Math.floor(moment.duration(seconds,'seconds').asHours()) + ':' + moment.duration(seconds,'seconds').minutes() + ':' + moment.duration(seconds,'seconds').seconds();
 		metadata = `
 		metadata = `
 		<div class="white-box m-b-0">
 		<div class="white-box m-b-0">
@@ -3573,9 +3576,12 @@ function homepageCalendar(timeout){
         $('.fc-toolbar').addClass('fc-alternate');
         $('.fc-toolbar').addClass('fc-alternate');
     }
     }
 	organizrAPI('POST','api/?v1/homepage/connect',{action:'getCalendar'}).success(function(data) {
 	organizrAPI('POST','api/?v1/homepage/connect',{action:'getCalendar'}).success(function(data) {
+        console.log(data);
 		var response = JSON.parse(data);
 		var response = JSON.parse(data);
+        console.log(response.data);
         $('#calendar').fullCalendar('removeEvents');
         $('#calendar').fullCalendar('removeEvents');
-        $('#calendar').fullCalendar('addEventSource', response.data);
+        $('#calendar').fullCalendar('addEventSource', response.data.events);
+        $('#calendar').fullCalendar('addEventSource', response.data.ical);
 		response = '';
 		response = '';
 	}).fail(function(xhr) {
 	}).fail(function(xhr) {
 		console.error("Organizr Function: API Connection Failed");
 		console.error("Organizr Function: API Connection Failed");
@@ -3704,7 +3710,7 @@ function inlineLoad(){
 	   },
 	   },
 	   close: function() {
 	   close: function() {
 		  if(typeof player !== 'undefined'){
 		  if(typeof player !== 'undefined'){
-			  console.log('STOP STOP STOP')
+              console.log('STOP STOP STOP');
 			  player.destroy();
 			  player.destroy();
 		  }
 		  }
 		}
 		}

Деякі файли не було показано, через те що забагато файлів було змінено