Просмотр исходного кода

Merge pull request #688 from causefx/develop

Develop
causefx 8 лет назад
Родитель
Сommit
1e5e7753cd

+ 9 - 0
.gitignore

@@ -46,6 +46,9 @@ Network Trash Folder
 Temporary Items
 .apdisk
 
+# Files from my local computer
+php_errors.log
+
 # =========================
 # Organizr files
 # =========================
@@ -58,6 +61,8 @@ org.log
 org*.log
 test.php
 users.db
+speedtest.db
+chatpack.db
 config/cacert.pem
 config/config.php
 config/config*.bak.php
@@ -67,3 +72,7 @@ config/users*.db
 config/users*.bak.db
 config/tmp/*
 images/cache/*
+backups/*
+backups/
+backups
+test*.php

+ 13 - 2
ajax.php

@@ -64,9 +64,14 @@ switch ($_SERVER['REQUEST_METHOD']) {
 				echo getPlexStreams(12, PLEXSHOWNAMES, $GLOBALS['USER']->role);
 				die();
 				break;
+			case 'ombi-requests':
+				qualifyUser(PLEXHOMEAUTH, true);
+				echo buildOmbiList($GLOBALS['USER']->role, $GLOBALS['USER']->username);
+				die();
+				break;
 			case 'emby-recent':
 				qualifyUser(EMBYHOMEAUTH, true);
-				echo getEmbyRecent($_GET['type'], 12);
+				echo getEmbyRecent(array("Movie" => EMBYRECENTMOVIE, "Episode" => EMBYRECENTTV, "MusicAlbum" => EMBYRECENTMUSIC, "Series" => EMBYRECENTTV));
 				die();
 				break;
 			case 'plex-recent':
@@ -123,6 +128,9 @@ switch ($_SERVER['REQUEST_METHOD']) {
             default: // Stuff that you need admin for
                 qualifyUser('admin', true);
                 switch ($action) {
+					case 'ombi-action':
+                        sendResult(ombiAction($_POST['id'], $_POST['action_type'], $_POST['type']), "search", "OMBI ", "action completed successfully", "an error occured");
+                        break;
 					case 'get-emails':
 						$response = printEmails(getEmails($_POST['type']));
 						break;
@@ -150,6 +158,10 @@ switch ($_SERVER['REQUEST_METHOD']) {
                     case 'remove-images':
                         removeFiles('images/'.(isset($_POST['file'])?$_POST['file']:''));
                         sendNotification(true);
+                        break;
+					case 'remove-file':
+                        removeFiles($_POST['file']);
+                        sendNotification(true);
                         break;
                     case 'update-config':
 						$response['notify'] = sendNotification(updateConfig($_POST));
@@ -226,4 +238,3 @@ if ($response) {
 } else {
 	sendNotification(false, 'Error: No Output Specified!');
 }
-

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
bower_components/bootstrap/dist/css/bootstrap.min.css


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
bower_components/jquery/dist/jquery.min.js


+ 12 - 11
chat/refreshmessages.php

@@ -17,7 +17,7 @@ if( $result = $db->query("SELECT * FROM
                          (SELECT id, timestamp, user, avatar, message
                           FROM chatpack_log ORDER BY id DESC LIMIT 125)
                           ORDER BY id ASC") )
-{   
+{
     $newmessages = array();
 
     while( $row = $result->fetchArray() )
@@ -27,16 +27,17 @@ if( $result = $db->query("SELECT * FROM
         $user = $row["user"];
         $avatar = $row["avatar"];
         $message = $row["message"];
-        
+
         $timenow = time();
         $messagetime = date("h:iA", intval($timestamp));
         $messagedate = date("m-d", intval($timestamp));
+        $messagenewtime = date("Y-m-d H:i:s", intval($timestamp));
         $message = utf8_encode($message);
-        
+
         $msgstr = "";  // message components
 
         if( strlen($user) > 0 && strlen($message) > 0 )
-        {  
+        {
             // catch emoticon
 
             $emoticon = false;
@@ -63,12 +64,12 @@ if( $result = $db->query("SELECT * FROM
                 $ending = substr($imagename, $endingpos+1);
                 $originalimg = $originalname . "." . $ending;
             }
-            
+
             if( !$emoticon && !$image )
             {
                 $message = decryptmessage($message);
             }
-            
+
             // catch URLs
 
             /*$message = str_replace("https://", "http://", $message);
@@ -91,7 +92,7 @@ if( $result = $db->query("SELECT * FROM
                                     "<span style=\"color: #d89334;\"><strong>$1</strong></span>", $message);
 
             // user online avatar
-            
+
             //$avatar = "<img class=\"avatarimg\" id=\"$timestamp\" src=\"" . $avatar . "\">";
 
             // unique message key
@@ -101,9 +102,9 @@ if( $result = $db->query("SELECT * FROM
 
             // show user avatar and message
             if($user == $currentuser){
-                $msgstr = $msgstr . "<p class=\"avatarandtext\" id=\"$messagekey\"><li><img src=\"$avatar\" id=\"$timestamp\" class=\"img-circle user-avatar $user\" alt=\"$user\"><div class=\"chat-panel blue-bg messagelike\" id=\"$id\"><div class=\"chat-heading clearfix\"><h4 class=\"pull-left zero-m\">$user</h4><p class=\"pull-right\"><i class=\"fa fa-clock-o\"></i>$messagedate $messagetime </p></div><div class=\"chat-body\">$message</div><span class=\"readed\"><i class=\"fa fa-heart red\" id=\"like$id\"></i></span></div></li></p>";//class="chat-inverted"
+                $msgstr = $msgstr . "<p class=\"avatarandtext\" id=\"$messagekey\"><li><img src=\"$avatar\" id=\"$timestamp\" class=\"img-circle user-avatar $user\" alt=\"$user\"><div class=\"chat-panel blue-bg messagelike\" id=\"$id\"><div class=\"chat-heading clearfix\"><h4 class=\"pull-left zero-m\">$user</h4><p class=\"pull-right\"><i class=\"fa fa-clock-o\"></i><timestamp time=\"$messagenewtime\" class=\"chat-timestamp\">$messagenewtime</timestamp></p></div><div class=\"chat-body\">$message</div></div></li></p>";//class="chat-inverted"
             }else{
-                $msgstr = $msgstr . "<p class=\"avatarandtext\" id=\"$messagekey\"><li class=\"chat-inverted\"><img src=\"$avatar\" id=\"$timestamp\" class=\"img-circle user-avatar $user\" alt=\"$user\"><div class=\"chat-panel red-bg messagelike\" id=\"$id\"><div class=\"chat-heading clearfix\"><h4 class=\"pull-left zero-m\">$user</h4><p class=\"pull-right\"><i class=\"fa fa-clock-o\"></i>$messagedate $messagetime </p></div><div class=\"chat-body\">$message</div><span class=\"readed\"><i class=\"fa fa-heart red liked\" id=\"like$id\"></i></span></div></li></p>";//class="chat-inverted"
+                $msgstr = $msgstr . "<p class=\"avatarandtext\" id=\"$messagekey\"><li class=\"chat-inverted\"><img src=\"$avatar\" id=\"$timestamp\" class=\"img-circle user-avatar $user\" alt=\"$user\"><div class=\"chat-panel red-bg messagelike\" id=\"$id\"><div class=\"chat-heading clearfix\"><h4 class=\"pull-left zero-m\">$user</h4><p class=\"pull-right\"><i class=\"fa fa-clock-o\"></i><timestamp time=\"$messagenewtime\" class=\"chat-timestamp\">$messagenewtime</timestamp></p></div><div class=\"chat-body\">$message</div></div></li></p>";//class="chat-inverted"
             }
 
             array_push($newmessages, $msgstr);
@@ -126,7 +127,7 @@ function decryptmessage($msg)
     $initvector = "aC92eG1PdGhuMXN6";
     $decryptedmessage = openssl_decrypt($msg, "AES-256-CBC", $key, 0, $initvector);
     $decryptedmessage = utf8_encode($decryptedmessage);
-    
+
     return $decryptedmessage;
 }
 
@@ -151,4 +152,4 @@ else
     }
 }
 
-?>
+?>

+ 0 - 96
chatAJAX.php

@@ -1,96 +0,0 @@
-<?php
-
-define("CHATDB", "chat.db");
-
-if (!file_exists(CHATDB)) {
-    
-    try{
-        $db = new PDO('sqlite:'.CHATDB);
-
-        $sql ="
-          CREATE TABLE IF NOT EXISTS MESSAGES 
-          (ID INTEGER PRIMARY KEY AUTOINCREMENT,
-          USER TEXT NOT NULL,
-          EMAIL TEXT NOT NULL,
-          MESSAGE TEXT NOT NULL,
-          TIME TIMESTAMP NOT NULL DEFAULT((julianday('now') - 2440587.5)*86400.0))";
-
-        $ret = $db->exec($sql);
-        sleep(0.5);
-        $ret = $db->exec('PRAGMA journal_mode = wal;');
-        sleep(0.5);
-        
-
-        header("Refresh:0");
-    }
-    catch(PDOException $e){
-       die('Failed to execute query:'. $e->getMessage());
-    }
-
-   $db=null;
-    
-}elseif(file_exists(CHATDB)) {
-    
-   try{
-        $db = new PDO('sqlite:'.CHATDB);
-    }
-    catch(PDOException $e){
-        die('Failed to connect:'. $e->getMessage());
-    }
-}
-
-//check to see if the ajax call was to update db
-
-if (isset($_POST['text'])){
-
-    $msg=$_POST['text'];
-    $us=$_POST['user'];
-    $email=$_POST['email'];
-
-    $sql ="INSERT INTO MESSAGES (USER,MESSAGE,EMAIL) VALUES(?, ?, ?)";
-
-    try{
-        $ret = $db->prepare($sql);
-        $ret->execute([$us,$msg, $email]);
-    }
-    catch(PDOException $e){
-        console.log('Failed to update db:'. $e->getMessage());
-    }
-}else{
-    //the script will run for 20 seconds after the initial ajax call
-    $time=time()+20;
-
-    while(time()<$time){
-        if ($_POST['time']){
-            $prevtime=$_POST['time'];
-        }
-        else {
-            $prevtime=0;
-        }
-        //query to see if there are new messages
-
-        $sql ="SELECT TIME,USER,MESSAGE,EMAIL FROM MESSAGES WHERE TIME>? ORDER BY TIME ASC";
-
-        try{
-            $ret = $db->prepare($sql);
-            $ret->execute([$prevtime]);
-
-            $resarr = $ret->fetchAll(PDO::FETCH_ASSOC);
-
-            //if there are no new messages in the db, sleep for half a second and then run loop again
-            if (!$resarr)
-                sleep(0.5);
-            else{
-                echo json_encode($resarr);
-                break;
-            }
-        }
-        catch(PDOException $e){
-            console.log('Failed to get messages:'. $e->getMessage());
-        }
-    }
-}
-
-$db=null;
-
-?>

+ 78 - 218
chatjs.php

@@ -1,4 +1,4 @@
-<?php 
+<?php
 require_once("user.php");
 $USER = new User("registration_callback");
 $userpic = md5( strtolower( trim( $USER->email ) ) );
@@ -24,9 +24,8 @@ function formatAMPM(date) {
 var isMobile = false; //initiate as false
 var d = new Date();
 var timezone = d.getTimezoneOffset();
-console.log(timezone)
 // device detection
-if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent) 
+if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent)
     || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(navigator.userAgent.substr(0,4))) isMobile = true;
 /*
  * JavaScript MD5
@@ -313,74 +312,74 @@ if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine
 $(document).ready(function()
 {
     // init
-    
+
     $(window).focus();
     var tabinfocus = true;
     $("#chat").hide();
 
-    
+
     // allowed characters in username
-    
+	/*
     $("#username").keyup(function()
     {
         var text = $(this).val();
         $(this).val(text.replace(/[^a-zA-Z0-9 ]/g, ""));
     });
-    
+	*/
     // enter username
-    
+
     var user = "";
-    
+
     user = "<?php echo $USER->username; ?>";
-    
+
     // choose avatar, check username, start chat
-    
+
     var avatar = "";
     avatar = "https://www.gravatar.com/avatar/" + md5('<?php echo $USER->email; ?>') + "?d=mm";
 
     startchat();
-    
+
     // start chat
-    
+
     function startchat()
     {
         // zoom chat to fit viewport
-        
+
         if( $(window).innerWidth() > 630 )  // if not mobile
         {
             var ratio = $(window).innerHeight() / 660;  // browser viewport by chat height
-        
+
             //$("#chat").css("zoom", ratio);
             //$("#chat").css("-moz-transform-origin", "0 0");
-            //$("#chat").css("-moz-transform", "scale(" + ratio + ")");      
+            //$("#chat").css("-moz-transform", "scale(" + ratio + ")");
         }
-        
+
         // update favicon to user avatar
-        
+
         //$("#favicon").remove();
-        //var userfavicon = "<link id=\"favicon\" type=\"image/x-icon\"" + 
+        //var userfavicon = "<link id=\"favicon\" type=\"image/x-icon\"" +
                           " rel=\"shortcut icon\" href=\"img/" + avatar + ".ico\">";
         //$(userfavicon).appendTo("head");
-        
+
         // start chat
         $("#chat").show();
         $("#message").focus();
-        
+
         refresh();
     }
-    
+
     // allowed characters in message
-    
 
-    
+
+
     // log message
-    
+
     $("#message").focus().keypress(function(event)
     {
         if( event.keyCode === 13 )
         {
             event.preventDefault();
-            
+
             if( $("#content").is(":visible") )
             {
                 var message = $("#message").val();
@@ -394,110 +393,22 @@ $(document).ready(function()
                     url: "chat/logmessage.php",
                     data: data,
                     cache: false
-                });    
+                });
             }
         }
     });
-    
-    // log emoticon
-    
-    $(".emoticonimg").click(function()
-    {
-        var emoticonselected = $(this);
-        emoticonselected.hide();
-        var emoticonid = $(this).attr("id");
-        var data = "messagedata=" + "specialchar" + emoticonid + "###" + user + "###" + avatar;
-        
-        $.ajax
-        ({
-            type: "POST",
-            url: "chat/logmessage.php",
-            data: data,
-            cache: false,
-            success: function(result)
-            {
-                emoticonselected.show();
-            }
-        });
-    });
-    
-    // show upload form
-    
-    $("#showuploadform").click(function()
-    {
-        $("#showuploadform").hide();
-        $("#showemoticons").show();
-        $("#uploadform").show();
-        $("#emoticons").hide();
-        $("#loadingwrapper").hide();
-        
-        var r = Math.floor((Math.random() * 14) + 1);
-        var randomemoticon = "chat/img/emoticon" + r + ".png";
-        $("#showemoticonsimg").attr("src", randomemoticon);
-        
-        refresh();  // also use as manual content refresh
-    });
-    
-    // upload image
-    
-    $("#form").submit(function(event)
-    {
-        event.preventDefault();
-        
-        $("#uploadform").hide();
-        $("#showemoticons").hide();
-        $("#loadingwrapper").show();
-        
-        var filedata = $("#uploadimage").prop("files")[0];
-        var formdata = new FormData();             
-        formdata.append("image", filedata);
-        var datavars = user + "###" + avatar;
-        formdata.append("datavars", datavars);
-        
-        $.ajax
-        ({
-            type: "POST",
-            url: "chat/uploadimage.php",
-            cache: false,
-            contentType: false,
-            processData: false,
-            data: formdata,
-            success: function(result)
-            {
-                $("#uploadimage").val("");
-                $("#showuploadform").show();
-                $("#showemoticons").hide();
-                $("#uploadform").hide();
-                $("#loadingwrapper").hide();
-                $("#content").show();
-                $("#emoticons").show();
-            }
-        }); 
-    });
-    
-    // show emoticons
-    
-    $("#showemoticons").click(function()
-    {
-        $("#showuploadform").show();
-        $("#showemoticons").hide();
-        $("#uploadform").hide();
-        $("#loadingwrapper").hide();
-        $("#content").show();
-        $("#emoticons").show();
-    });
-    
+
     // refresh content
-    
+
     var content = $("#messages");
     var newcontent = content.html();
-    
+
     function refresh()
-    {   
+    {
         setTimeout(function()
         {
             var data = "user=" + user;
-            
+
             $.ajax
             ({
                 type: "POST",
@@ -505,11 +416,11 @@ $(document).ready(function()
                 data: data,
                 cache: false,
                 success: function(result)
-                {   
+                {
                     // check who is still online
-                                    
+
                     var datetoday = new Date();
-                    var timenow = datetoday.getTime() / 1000;  
+                    var timenow = datetoday.getTime() / 1000;
 
                     $.ajax
                 ({
@@ -521,7 +432,7 @@ $(document).ready(function()
                         var oldonlineusers = $("#onlineusers").html();
                         var newonlineusers = '';
                         var onlinecount = 0;
-                        
+
                         if( onlineusers.length <= 0 )  // no user typing
                         {
                             newonlineusers += "No Users Online";
@@ -529,7 +440,7 @@ $(document).ready(function()
 
                         }
                         else
-                        {   
+                        {
                             if( onlineusers.length >= 1 )  // one user typing
                             {
                                 jQuery.each( onlineusers, function( i, val ) {
@@ -541,18 +452,18 @@ $(document).ready(function()
                                         status = '<span style="min-height: 14px;margin-top: 10px;" class="pull-right badge badge-danger"> </span>';
                                         color = "red";
                                     }else{
-                                        status = '<span style="min-height: 14px;margin-top: 10px;" class="pull-right badge badge-success"> </span>';                       
-                                        color = "blue";                       
+                                        status = '<span style="min-height: 14px;margin-top: 10px;" class="pull-right badge badge-success"> </span>';
+                                        color = "blue";
                                     }
                                     if( timecheck < timenow - 3600 )
                                     {
-                                        newonlineusers += '';      
+                                        newonlineusers += '';
                                     }else{
-                                        newonlineusers += '<div class="member-info"><img style="height:40px" src="'+val[2]+'" alt="admin" class="img-circle"><span class="member-name" style="position: absolute;margin-top: 10px;">'+val[0]+'</span>'+status+'</div>'; 
+                                        newonlineusers += '<div class="member-info"><img style="height:40px" src="'+val[2]+'" alt="admin" class="img-circle"><span class="member-name" style="position: absolute;margin-top: 10px;">'+val[0]+'</span>'+status+'</div>';
                                         i++;
                                         onlinecount++;
                                     }
-                                    
+
                                     $("img[alt^='"+val[0]+"']").each(function()
                                     {
                                         var timestamp = val[1];
@@ -573,7 +484,7 @@ $(document).ready(function()
 
                                         }
                                     });
-                                    
+
                                 });
                             }
                         }
@@ -587,24 +498,24 @@ $(document).ready(function()
                     }
                 });
 
-                    
-                    
+
+
                     // new messages
-                    
+
                     var newmessages = result.split("###endofmessage###");
 
                     for( var i=0; i<newmessages.length; i++ )
                     {
-                        
+
                         var message = newmessages[i];
-                        
+
                         if( message != "" )
                         {
                             var messagekeypos = message.indexOf("avatarandtext");
                             var messagekey = message.substr(messagekeypos + 19, 32);
                             var contentdom = document.getElementById("messages");
                             var messagedom = document.getElementById(messagekey);
-                            
+
                             if( $.contains(contentdom, messagedom) == false )
                             {
                                 // append new message
@@ -627,11 +538,11 @@ $(document).ready(function()
                                                 }else {
                                                     newdate = moment(new Date($this+'Z')).format('lll');
                                                 }
-                                                $(this).text(newdate); 
+                                                $(this).text(newdate);
                                             });
                                         });
                                     }
-                                    
+
                                     // new message tab alert
 
                                     var userwriting = user + "writing";
@@ -644,77 +555,41 @@ $(document).ready(function()
                                             newmessagealert(message);
                                         }
                                     }
-                                    
-                                    // refresh eventlisteners of messages to set likes
-                        
-                                    $(".messagelike").unbind().click(function()
-                                    {
-                                        if( this.innerHTML.indexOf("target=") == -1 &&
-                                            this.innerHTML.indexOf("_blank") == -1 )
-                                        {
-                                            likemessage(this.id);
-                                        }
-                                    });
+
                                 });
                             }
                         }
                     }
-                    
-                    // get and show likes
-                    
-                    $.ajax
-                    ({
-                        url: "chat/getlikes.php",
-                        cache: false,
-                        success: function(result)
-                        {
-                            var likesandunlikes = result.split("#");
-                            var likedmessages = likesandunlikes[0];
-                            var unlikedmessages = likesandunlikes[1];
-                            var likes = JSON.parse(likedmessages);
-                            var unlikes = JSON.parse(unlikedmessages);
-                            
-                            for( var i=0; i<likes.length; i++ )
-                            {
-                                var likeid = "#like" + likes[i];
-                                $(likeid).show();
-                            }
-                            
-                            for( var i=0; i<unlikes.length; i++ )
-                            {
-                                var unlikeid = "#like" + unlikes[i];
-                                $(unlikeid).hide();
-                            }
-                        }
-                    });
-                    
+
+
+
                     // hide intro
-                    
+
                     if( result != "" )
                     {
-                        $("#intro").hide();        
+                        $("#intro").hide();
                     }
-                    
+
                     // loop
-                    
+
                     refresh();
                 }
             });
-            
+
             // update if current user is typing
-            
+
             if( $("#message").val() != "" )
             {
-                istyping(user, 1);      
+                istyping(user, 1);
             }
             else if( $("#message").val() == "" )
             {
-                istyping(user, 0);     
+                istyping(user, 0);
             }
-            
+
         }, 1250);
     }
-    
+
     // tab focus
     window.onload = function()
     {
@@ -748,9 +623,9 @@ $(document).ready(function()
                 console.log("not in focus");
             }
         }
- 
+
     };
-    
+
     window.onblur = function()
     {
         if(window.chatLoaded === true){
@@ -758,11 +633,11 @@ $(document).ready(function()
             console.log("not in focus");
         }
     };
-    
+
     // new message tab alert
-    
+
     function newmessagealert(message)
-    {   
+    {
 
 
         if( !tabinfocus )
@@ -791,37 +666,22 @@ $(document).ready(function()
                     }
                 });
             }
-                        
+
             // sound
-                        
+
             var audio = $("#tabalert")[0];
             audio.play();
         }
     }
-    
-    // like message
-    
-    function likemessage(messageid)
-    {
-        var data = "messageid=" + messageid;
-        
-        $.ajax
-        ({
-            type: "POST",
-            url: "chat/setlike.php",
-            data: data,
-            cache: false
-        });
-    }
-    
+
     // update which users are typing
-    
+
     function istyping(u, t)
     {
         // set typing user
-        
+
         var data = "datavars=" + u + "###" + t;
-                
+
         $.ajax
         ({
             type: "POST",
@@ -831,7 +691,7 @@ $(document).ready(function()
             success: function(result)
             {
                 // get typing users
-                
+
                 $.ajax
                 ({
                     url: "chat/gettyping.php",
@@ -839,7 +699,7 @@ $(document).ready(function()
                     success: function(result)
                     {
                         var typingusers = JSON.parse(result);
-                        
+
                         if( typingusers.length == 0 )  // no user typing
                         {
                             $("#istyping").html("");
@@ -873,4 +733,4 @@ $(document).ready(function()
             }
         });
     }
-});
+});

+ 51 - 43
check.php

@@ -3,20 +3,22 @@ if (file_exists('config/config.php')) {
     require_once("user.php");
     $db = DATABASE_LOCATION.'users.db';
     $folder = USER_HOME;
+	$USER = new User("registration_callback");
+	qualifyUser("admin", true);
 }
 
 function check($extension) {
-    
-    if (extension_loaded($extension)) : 
+
+    if (extension_loaded($extension)) :
         echo '<div class="col-lg-3">';
         echo '<div class="panel panel-success">';
         echo '<div class="panel-heading">';
         echo '<h3 class="panel-title">'. $extension . '</h3>';
         echo '</div>';
         echo '<div style="color: gray" class="panel-body">';
-        echo $extension . ' is loaded and ready to rock-n-roll!  Good 2 Go!';
-        echo '</div></div></div>'; 
-    
+        echo $extension . ' is installed!';
+        echo '</div></div></div>';
+
     else :
         echo '<div class="col-lg-3">';
         echo '<div class="panel panel-danger">';
@@ -25,38 +27,38 @@ function check($extension) {
         echo '</div>';
         echo '<div style="color: gray" class="panel-body">';
         echo $extension . ' is NOT loaded!  Please install it before proceeding';
-        
+
         if($extension == "PDO_SQLITE") :
-            
+
             echo '<br/> If you are on Windows, please uncomment this line in php.ini: ;extension=php_pdo_sqlite.dll<br/>If you are on Ununtu, please install php5.3-sqlite or php7-sqlite depending on your version of PHP, then restart PHP service';
-        
+
         endif;
-    
-        echo '</div></div></div>'; 
-    
-    endif;  
-    
+
+        echo '</div></div></div>';
+
+    endif;
+
 }
 
 function checkFunction($function) {
-    
-    if (function_exists($function)) : 
+
+    if (function_exists($function)) :
         echo '<div class="col-lg-3">';
         echo '<div class="panel panel-success">';
         echo '<div class="panel-heading">';
         echo '<h3 class="panel-title">'. $function . '</h3>';
         echo '</div>';
         echo '<div style="color: gray" class="panel-body">';
-        echo $function . ' is loaded and ready to rock-n-roll!  Good 2 Go!';
-    
+        echo $function . ' is installed!';
+
         if($function == "MAIL") :
-            
+
             echo '<br/> **Please make sure you can send email prior to installing as this is needed for password resets**';
-        
+
         endif;
-    
-        echo '</div></div></div>'; 
-    
+
+        echo '</div></div></div>';
+
     else :
         echo '<div class="col-lg-3">';
         echo '<div class="panel panel-danger">';
@@ -64,26 +66,26 @@ function checkFunction($function) {
         echo '<h3 class="panel-title">'. $function . '</h3>';
         echo '</div>';
         echo '<div style="color: gray" class="panel-body">';
-        echo $function . ' is NOT loaded!  Please install it before proceeding'; 
-    
+        echo $function . ' is NOT loaded!  Please install it before proceeding';
+
         if($function == "MAIL") :
-            
+
             echo '<br/> **If you do not want to use password resets, this is okay not being installed**  EDIT LINE 31 on user.php to "false" [const use_mail = false]';
-        
+
         endif;
-    
-        echo '</div></div></div>'; 
-    
-    endif;  
-    
+
+        echo '</div></div></div>';
+
+    endif;
+
 }
 
 function getFilePermission($file) {
-        
+
     if (file_exists($file)) :
-    
+
         $length = strlen(decoct(fileperms($file)))-3;
-    
+
         if($file{strlen($file)-1}=='/') :
 
             $name = "Folder";
@@ -101,8 +103,8 @@ function getFilePermission($file) {
             echo '<h3 class="panel-title">'. $file . '<permissions style="float: right;">Permissions: ' . substr(decoct(fileperms($file)),$length) . '</permissions></h3>';
             echo '</div>';
             echo '<div style="color: gray" class="panel-body">';
-            echo $file . ' is writable and ready to rock-n-roll!  Good 2 Go!';
-            echo '</div></div></div>'; 
+            echo $file . ' is writable!';
+            echo '</div></div></div>';
         else :
             echo '<div class="col-lg-6">';
             echo '<div class="panel panel-danger">';
@@ -111,10 +113,10 @@ function getFilePermission($file) {
             echo '</div>';
             echo '<div style="color: gray" class="panel-body">';
             echo $file . ' is NOT writable!  Please change the permissions to make it writtable by the PHP User.';
-            echo '</div></div></div>'; 
+            echo '</div></div></div>';
 
         endif;
-        
+
     endif;
 }
 
@@ -125,7 +127,7 @@ function getFilePermission($file) {
 <html lang="en" class="no-js">
 
     <head>
-        
+
         <meta charset="UTF-8">
         <meta name="viewport" content="width=device-width, initial-scale=1.0">
         <meta http-equiv="X-UA-Compatible" content="IE=edge">
@@ -138,7 +140,7 @@ function getFilePermission($file) {
         <script src="bower_components/jquery/dist/jquery.min.js"></script>
         <script src="bower_components/jquery.nicescroll/jquery.nicescroll.min.js"></script>
 		<script src="bower_components/slimScroll/jquery.slimscroll.min.js"></script>
-        
+
     </head>
 
     <body id="body-check" class="gray-bg" style="padding: 0;">
@@ -147,13 +149,13 @@ function getFilePermission($file) {
 
             <!--Content-->
             <div id="content"  style="margin:0 20px; overflow:hidden">
-                
+
                 <h1><center>Check Requirements & Permissions</center></h1>
 
                 <div class="row">
-                
+
                 <?php
-                
+
                 check("PDO_SQLITE");
                 check("PDO");
                 check("SQLITE3");
@@ -166,6 +168,12 @@ function getFilePermission($file) {
                 checkFunction("hash");
                 checkFunction("fopen");
                 checkFunction("fsockopen");
+				checkFunction("ob_start");
+				checkFunction("ob_get_contents");
+				checkFunction("ob_end_flush");
+				checkFunction("fwrite");
+				checkFunction("fclose");
+				checkFunction("readfile");
                 ?>
                 </div>
                 <div class="row">

+ 34 - 0
config/configDefaults.php

@@ -4,16 +4,23 @@ return array(
 	"user_home" => false,
 	"timezone" => "",
 	"plexURL" => "",
+	"plexTabURL" => "",
 	"plexToken" => "",
 	"plexRecentMovie" => "false",
 	"plexRecentTV" => "false",
 	"plexRecentMusic" => "false",
 	"plexPlayingNow" => "false",
+	"plexRecentMovieAuth" => "false",
+	"plexRecentTVAuth" => "false",
+	"plexRecentMusicAuth" => "false",
+	"plexPlayingNowAuth" => "false",
  	"plexShowNames" => false,
 	"plexHomeAuth" => false,
 	"plexSearch" => false,
+	"plexSearchAuth" => false,
 	"plexRecentItems" => "20",
 	"plexPlaylists" => "false",
+	"plexPlaylistsAuth" => "false",
 	"plexTabName" => "",
 	"embyURL" => "",
 	"embyToken" => "",
@@ -41,6 +48,9 @@ return array(
 	"sabnzbdURL" => "",
 	"sabnzbdKey" => "",
 	"sabnzbdHomeAuth" => false,
+	"ombiURL" => "",
+	"ombiKey" => "",
+	"ombiAuth" => false,
 	"headphonesURL" => "",
 	"headphonesKey" => "",
 	"headphonesHomeAuth" => false,
@@ -99,4 +109,28 @@ return array(
 	"couchURL" => "",
 	"couchAPI" => "",
 	"couchHomeAuth" => false,
+	"weather" => "false",
+	"weatherAuth" => "false",
+	"speedtestAuth" => "false",
+	"recentRefresh" => "600000",
+	"requestRefresh" => "600000",
+	"nowPlayingRefresh" => "15000",
+	"embyRecentMovieAuth" => "false",
+	"embyRecentTVAuth" => "false",
+	"embyRecentMusicAuth" => "false",
+	"embyPlayingNowAuth" => "false",
+	"homepageOrdercustomhtml" => '1',
+	"homepageOrdernotice" => '2',
+	"homepageOrderplexsearch" => '3',
+	"homepageOrderspeedtest" => '4',
+	"homepageOrdernzbget" => '5',
+	"homepageOrdersabnzbd" => '6',
+	"homepageOrderplexnowplaying" => '7',
+	"homepageOrderplexrecent" => '8',
+	"homepageOrderplexplaylist" => '9',
+	"homepageOrderembynowplaying" => '10',
+	"homepageOrderembyrecent" => '11',
+	"homepageOrderombi" => '12',
+	"homepageOrdercalendar" => '13',
+	'requestedUserOnly' => 'true',
 );

+ 19 - 13
css/style.css

@@ -749,7 +749,7 @@ a.text-info:hover {
   font-size: 19px;
   text-align: center;
   text-align: -webkit-center;
-    
+
 }
 
 .gn-menu .label {
@@ -958,7 +958,7 @@ button::-moz-focus-inner {
 html, body {
   height: 100%;
 }
-::-webkit-scrollbar { 
+::-webkit-scrollbar {
    display: none;
 }
 
@@ -971,10 +971,10 @@ body {
   position: relative;
   background: #F1F4F5;
   overflow-x: hidden;
-  overflow-x:hidden; 
+  overflow-x:hidden;
   /*MS Edge */
   -ms-overflow-style: -ms-autohiding-scrollbar;
-  -ms-overflow-style: none; 
+  -ms-overflow-style: none;
 }
 
 .main-wrapper {
@@ -1019,6 +1019,10 @@ body {
   margin: 0 !important;
 }
 
+.zero-p {
+  padding: 0 !important;
+}
+
 .green {
   color: #42b382;
 }
@@ -1062,7 +1066,9 @@ body {
 .grayish-blue {
   color: #37474f;
 }
-
+.white {
+	color: #fff;
+}
 .white-bg {
   background: #fff !important;
 }
@@ -1167,7 +1173,7 @@ body {
 }
 
 .small-box {
-  padding: 20px 5px;
+  padding: 20px 8px;
 }
 
 .small-box .info {
@@ -2218,7 +2224,7 @@ table.dataTable.no-footer, table.dataTable thead th, table.dataTable thead td {
     .fc-title {
      text-overflow: ellipsis;
      white-space: nowrap;
-     overflow: hidden;   
+     overflow: hidden;
     }
 }
 
@@ -3530,7 +3536,7 @@ ul.inbox-pagination li {
 
 .ns-effect-bouncyflip p {
   padding: 0.5em 0.8em 0.8em 3.5em;
-  padding-left: 0px !important;    
+  padding-left: 0px !important;
 }
 
 .ns-effect-bouncyflip .ns-close::after,
@@ -5964,17 +5970,17 @@ label {
   z-index: 1;
   /*right: -425px;*/
   right: calc(-105%);
-  right: -webkit-calc(-105%);    
+  right: -webkit-calc(-105%);
   -webkit-box-shadow: -1px 1px 5px 0px rgba(0, 0, 0, 0.13);
           box-shadow: -1px 1px 5px 0px rgba(0, 0, 0, 0.13);
-  
+
 }
 
 .mini-nav .members-sidebar {
   width: calc(100% - 50px);
   width: -webkit-calc(100% - 50px);
   right: calc(-100%);
-  right: -webkit-calc(-100%); 
+  right: -webkit-calc(-100%);
 }
 
 .members-sidebar .messages {
@@ -6195,7 +6201,7 @@ label {
 }
 
 .content-tools a {
-  color: #76828E; 
+  color: #76828E;
 }
 
 .flot-tooltip {
@@ -6214,7 +6220,7 @@ label {
   }
   .mdi-window-restore {
     display: none !important;
-  }    
+  }
   /*Remove margins from content block*/
   .content {
     margin: 0;

+ 44 - 29
error.php

@@ -1,32 +1,46 @@
 <?php
 // Include functions if not already included
 require_once('functions.php');
-
 // Upgrade environment
 upgradeCheck();
-
 // Lazyload settings
 $databaseConfig = configLazy('config/config.php');
-
 // Load USER
 require_once("user.php");
 $USER = new User("registration_callback");
-
+if(isset($_GET['error']) && $_GET['error'] !== '404'){
+    $status = (isset($_GET['error'])?$_GET['error']:404);
+    setcookie('lec', $status, time() + (5), "/", DOMAIN);
+    http_response_code($status);
+    //get file name
+    if(!empty($_SERVER['PHP_SELF'])){
+        $file = $_SERVER['PHP_SELF'];
+    }elseif(!empty($_SERVER['SCRIPT_NAME'])){
+        $file = $_SERVER['SCRIPT_NAME'];
+    }else{
+        $file = checkRootPath(dirname($_SERVER['SCRIPT_NAME'])).'error.php';
+    }
+    header('Location:'.$file);
+    exit();
+}
+if(!isset($_COOKIE['lec'])) {
+    $status = '404';
+} else {
+    $status = $_COOKIE['lec'];
+}
 // Create Database Connection
 $file_db = new PDO('sqlite:'.DATABASE_LOCATION.'users.db');
 $file_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
-
 // Some PHP config stuff
 ini_set("display_errors", 1);
 ini_set("error_reporting", E_ALL | E_STRICT);
-
+//Color stuff
 foreach(loadAppearance() as $key => $value) {
 	$$key = $value;
 }
-
+//error stuff
 $requested = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
-$status = (isset($_GET['error'])?$_GET['error']:404);
-$codes = array(  
+$codes = array(
        400 => array('Bad Request', 'The server cannot or will not process the request due to an apparent client error.', 'sowwy'),
        401 => array('Unauthorized', 'You do not have access to this page.', 'sowwy'),
        403 => array('Forbidden', 'The server has refused to fulfill your request.', 'sowwy'),
@@ -37,13 +51,12 @@ $codes = array(
        502 => array('Bad Gateway', 'The server received an invalid response from the upstream server while trying to fulfill the request.', 'confused'),
        503 => array('Service Unavailable', 'The server is currently unavailable (because it is overloaded or down for maintenance).', 'confused'),
        504 => array('Gateway Timeout', 'The upstream server failed to send a request in the time allowed by the server.', 'confused'),
-       999 => array('Not Logged In', 'You need to be logged in to access this page.', 'confused'),
+       999 => array('Not Logged In', 'You need to be logged in to access this page.', 'confused', '401'),
 );
-
 $errorTitle = ($codes[$status][0]) ? $codes[$status][0] : "Error";
 $message = ($codes[$status][1]) ? $codes[$status][1] : "An Error Occured";
 $errorImage = ($codes[$status][2]) ? $codes[$status][2] : "confused";
-
+$status = ($codes[$status][3]) ? $codes[$status][3] : $status;
 ?>
 
 <!DOCTYPE html>
@@ -54,12 +67,11 @@ $errorImage = ($codes[$status][2]) ? $codes[$status][2] : "confused";
         <meta name="viewport" content="width=device-width, initial-scale=1.0">
         <meta http-equiv="X-UA-Compatible" content="IE=edge">
         <meta name="msapplication-tap-highlight" content="no" />
-
         <title><?=$errorTitle;?></title>
-
-        <link rel="stylesheet" href="<?php echo checkRootPath(dirname($_SERVER['SCRIPT_NAME'])); ?>bower_components/bootstrap/dist/css/bootstrap.min.css">
-        <link rel="stylesheet" href="<?php echo checkRootPath(dirname($_SERVER['SCRIPT_NAME'])); ?>bower_components/Waves/dist/waves.min.css"> 
-        <link rel="stylesheet" href="<?php echo checkRootPath(dirname($_SERVER['SCRIPT_NAME'])); ?>css/style.css">
+        <link rel="stylesheet" href="<?php echo checkRootPath(dirname($_SERVER['SCRIPT_NAME'])); ?>bower_components/font-awesome/css/font-awesome.min.css?v=<?php echo INSTALLEDVERSION; ?>">
+        <link rel="stylesheet" href="<?php echo checkRootPath(dirname($_SERVER['SCRIPT_NAME'])); ?>bower_components/bootstrap/dist/css/bootstrap.min.css?v=<?php echo INSTALLEDVERSION; ?>">
+        <link rel="stylesheet" href="<?php echo checkRootPath(dirname($_SERVER['SCRIPT_NAME'])); ?>bower_components/Waves/dist/waves.min.css">
+        <link rel="stylesheet" href="<?php echo checkRootPath(dirname($_SERVER['SCRIPT_NAME'])); ?>css/style.css?v=<?php echo INSTALLEDVERSION; ?>">
 		<style><?php customCSS(); ?></style>
     </head>
     <body id="body-error" class="gray-bg" style="padding: 0;">
@@ -68,18 +80,21 @@ $errorImage = ($codes[$status][2]) ? $codes[$status][2] : "confused";
                 <div class="table-wrapper" style="background:<?=$sidebar;?>;">
                     <div class="table-row">
                         <div class="table-cell text-center">
-                            <div class="login i-block">
-                                <div class="content-box">
-                                    <div class="biggest-box" style="background:<?=$topbar;?>;">
-                                        <h1 class="zero-m text-uppercase" style="color:<?=$topbartext;?>; font-size: 40px;"><?=$errorTitle;?></h1>
-                                    </div>
-                                    <div class="big-box text-left">
-                                        <center><img src="<?php echo checkRootPath(dirname($_SERVER['SCRIPT_NAME'])); ?>images/<?=$errorImage;?>.png" style="height: 200px;"></center>
-                                        <h4 style="color: <?=$topbar;?>;" class="text-center"><?php echo $message;?></h4>
-                                        <button style="background:<?=$topbar;?>;" onclick="parent.location='../'" type="button" class="btn log-in btn-block btn-primary text-uppercase waves waves-effect waves-float"><text style="color:<?=$topbartext;?>;"><?php echo $language->translate("GO_BACK");?></text></button>
-                                    </div>
-                                </div>
-                            </div>
+                        	<div class="pagenotfound i-block">
+                        		<div class="content-box">
+                        			<div class="top" style="background:<?=$topbar;?>;">
+                        				<h1 class="zero-m" style="color:<?=$topbartext;?>;"><?=$status;?></h1>
+                        				<a href="#" onclick="parent.location='../'" class="fa-stack fa-2x icon-back">
+                        					<i class="fa fa-circle fa-stack-2x" style="color:<?=$topbartext;?>;"></i>
+                        					<i class="fa fa-long-arrow-left fa-stack-1x fa-inverse" style="color:<?=$topbar;?>;"></i>
+                        				</a>
+                        			</div>
+                        			<div class="big-box">
+                        				<h4 style="color: <?=$topbar;?>;"><?=$errorTitle;?></h4>
+                        				<p style="color: <?=$topbar;?>;"><?php echo $message;?></p>
+                        			</div>
+                        		</div>
+                        	</div>
                         </div>
                     </div>
                 </div>

Разница между файлами не показана из-за своего большого размера
+ 235 - 172
functions.php


Разница между файлами не показана из-за своего большого размера
+ 421 - 401
homepage.php


BIN
images/no-list.png


BIN
images/no-np.png


BIN
images/ombi-emby.png


BIN
images/ombi-plex.png


BIN
images/ombi.png


Разница между файлами не показана из-за своего большого размера
+ 328 - 274
index.php


+ 2 - 0
js/lazyload.min.js

@@ -0,0 +1,2 @@
+/*! Lazy Load 2.0.0-beta.2 - MIT license - Copyright 2007-2017 Mika Tuupola */
+!function(t,e){"object"==typeof exports?module.exports=e(t):"function"==typeof define&&define.amd?define([],e(t)):t.LazyLoad=e(t)}("undefined"!=typeof global?global:this.window||this.global,function(t){"use strict";function e(t,e){this.settings=r(s,e||{}),this.images=t||document.querySelectorAll(this.settings.selector),this.observer=null,this.init()}const s={src:"data-src",srcset:"data-srcset",selector:".lazyload"},r=function(){let t={},e=!1,s=0,o=arguments.length;"[object Boolean]"===Object.prototype.toString.call(arguments[0])&&(e=arguments[0],s++);for(;s<o;s++)!function(s){for(let o in s)Object.prototype.hasOwnProperty.call(s,o)&&(e&&"[object Object]"===Object.prototype.toString.call(s[o])?t[o]=r(!0,t[o],s[o]):t[o]=s[o])}(arguments[s]);return t};if(e.prototype={init:function(){if(!t.IntersectionObserver)return void this.loadImages();let e=this,s={root:null,rootMargin:"0px",threshold:[0]};this.observer=new IntersectionObserver(function(t){t.forEach(function(t){if(t.intersectionRatio>0){e.observer.unobserve(t.target);let s=t.target.getAttribute(e.settings.src),r=t.target.getAttribute(e.settings.srcset);"img"===t.target.tagName.toLowerCase()?(s&&(t.target.src=s),r&&(t.target.srcset=r)):t.target.style.backgroundImage="url("+s+")"}})},s),this.images.forEach(function(t){e.observer.observe(t)})},loadAndDestroy:function(){this.settings&&(this.loadImages(),this.destroy())},loadImages:function(){if(!this.settings)return;let t=this;this.images.forEach(function(e){let s=e.getAttribute(t.settings.src),r=e.getAttribute(t.settings.srcset);"img"===e.tagName.toLowerCase()?(s&&(e.src=s),r&&(e.srcset=r)):e.style.backgroundImage="url("+s+")"})},destroy:function(){this.settings&&(this.observer.disconnect(),this.settings=null)}},t.lazyload=function(t,s){return new e(t,s)},t.jQuery){const s=t.jQuery;s.fn.lazyload=function(t){return t=t||{},t.attribute=t.attribute||"data-src",new e(s.makeArray(this),t),this}}return e});

+ 28 - 16
lang/de.ini

@@ -312,24 +312,36 @@ CHECK_FRAME = "Frame testen"
 GENERATE_API_KEY = "Generate API Schlüssel"
 ORGANIZR_API_KEY = "Organizr API Schlüssel"
 TEST_EMAIL = "Test E-Mail senden"
-BACKUP_CREATED = "Backup Created"
-BACKUP_ERROR = "Backup Creation Error"
-BACKUP_NOW = "Backup Now"
-BACKUP_LIST = "Backup List"
+BACKUP_CREATED = "Sicherung erstellt"
+BACKUP_ERROR = "Fehler beim erstellen der Sicherung"
+BACKUP_NOW = "Jetzt sichern"
+BACKUP_LIST = "Liste der Sicherungen"
 SPLASH = "Splash"
 PING = "Ping"
 PING_URL = "Ping URL"
 URL = "URL"
-TEST_URL = "Enter URL to Test"
-MORE = "More"
-LESS = "Less"
-ENABLE_SPLASH_SCREEN = "Enable Splash Screen"
-ENABLE_CHAT = "Enable Chat"
-CHAT_AUTH = "Minimum authentication level to access Chat"
-AUTHBACKENDDOMAINFORMAT = "Advanced Domain to use for LDAP i.e. uid=s,ou=People,dc=example,dc=com"
-TOGGLE_ALL = "Toggle All"
-CALENDAR_REFRESH = "Calendar Refresh"
+TEST_URL = "URL zum testen eingeben"
+MORE = "Mehr"
+LESS = "Weniger"
+ENABLE_SPLASH_SCREEN = "Splash Screen aktivieren"
+ENABLE_CHAT = "Chat aktivieren"
+CHAT_AUTH = "Niedrigstes Benutzerlevel, um den Chat zu sehen"
+AUTHBACKENDDOMAINFORMAT = "Erweitere Domäne zu nutzen von LDAP i.e. uid=s,ou=People,dc=example,dc=com"
+TOGGLE_ALL = "Alle wechseln"
+CALENDAR_REFRESH = "Kalender neu laden"
 COUCH_URL = "Couchpotato URL"
-COUCH_KEY = "Couchpotato API/Key"
-DELETE_CHAT_DATABASE = "Delete Chat Database"
-INSTALLED_THEME = "Installed Theme"
+COUCH_KEY = "Couchpotato API/Schlüssel"
+DELETE_CHAT_DATABASE = "Chat Datenbank löschen"
+INSTALLED_THEME = "Installiertes Thema"
+PLEX_TAB_URL = "Plex Tab URL - i.e. https://domain.com/plex or https://plex.domain.com"
+RECENT_REFRESH = "Recent Items Refresh Rate"
+NOW_PLAYING_REFRESH = "Now Playing Refresh Rate"
+REQUEST_REFRESH = "Requests Refresh Rate"
+COLOR_TEMPLATE = "Color Templates"
+REQUESTED_ONLY = "Show only requests for that user - if Off it will show all requests"
+SIZE = "Size"
+OR_ICON_NAME = "or Icon Name"
+OMBI_URL = "Ombi V3 URL"
+OMBI_KEY = "Ombi V3 API Key"
+ENABLE_WEATHER = "Enable Weather Widget"
+WEATHER_AUTH = "Minimum authentication level to access Weather Widget"

+ 17 - 5
lang/en.ini

@@ -206,7 +206,7 @@ SABNZBD_KEY = "SABnzbd API Key"
 HEADPHONES_URL = "Headphones URL"
 HEADPHONES_PORT = "Headphones Port"
 HEADPHONES_KEY = "Headphones API Key"
-COOKIE_DOMAIN = "Domain Name for Cookie"
+COOKIE_DOMAIN = "Domain Name for Cookie & Auth Request i.e. domain.com"
 DAYS = "Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday"
 CALENDAR_START_DAY = "First Day"
 CALENDAR_START_DATE = "# of Days Before"
@@ -284,7 +284,7 @@ USED_BY = "Used By"
 ACCOUNT_MADE = "PLEX Account is now created, Click Join now"
 USERNAME_NAME = "Username or Name"
 ACCOUNT_SUBMITTED = "PLEX Invite Sent|1. Check Email and Accept Invite|2. Close This Modal with Small 'x' on Top Right|3. Sign in"
-PLEX_TAB_NAME = "PLEX Tab Name [only use this if your PLEX URL above is a sub-domain - i.e. https://plex.domain.com]"
+PLEX_TAB_NAME = "PLEX Tab Name [only use this if you proxy your Plex Tab - i.e. https://plex.domain.com or https://domain.com/plex]"
 IPINFO_TOKEN = "Get Token from https://ipinfo.io/account/registration as Default will expire"
 GET_PLEX_TOKEN = "Get PLEX Token"
 EMAIL_INVITE_HEADER = "Join My|Server"
@@ -306,8 +306,8 @@ EMAIL_NEWUSER_BUTTON = "Login"
 EMAIL_NEWUSER_SUBTITLE = "What do I do?"
 EMAIL_NEWUSER_SUBMESSAGE = "Now that you have signed up, you can basically do whatever you like.  Enjoy"
 PLAYLISTS = "Playlists"
-DOWNLOAD_REFRESH = "Refresh Download Queue"
-HISTORY_REFRESH = "Refresh History"
+DOWNLOAD_REFRESH = "Download Queue Refresh Rate"
+HISTORY_REFRESH = "History Refresh Rate"
 CHECK_FRAME = "Test Frame"
 GENERATE_API_KEY = "Generate API Key"
 ORGANIZR_API_KEY = "Organizr API Key"
@@ -328,8 +328,20 @@ ENABLE_CHAT = "Enable Chat"
 CHAT_AUTH = "Minimum authentication level to access Chat"
 AUTHBACKENDDOMAINFORMAT = "Advanced Domain to use for LDAP i.e. uid=s,ou=People,dc=example,dc=com"
 TOGGLE_ALL = "Toggle All"
-CALENDAR_REFRESH = "Calendar Refresh"
+CALENDAR_REFRESH = "Calendar Refresh Rate"
 COUCH_URL = "Couchpotato URL"
 COUCH_KEY = "Couchpotato API/Key"
 DELETE_CHAT_DATABASE = "Delete Chat Database"
 INSTALLED_THEME = "Installed Theme"
+PLEX_TAB_URL = "Plex Tab URL - i.e. https://domain.com/plex or https://plex.domain.com"
+RECENT_REFRESH = "Recent Items Refresh Rate"
+NOW_PLAYING_REFRESH = "Now Playing Refresh Rate"
+REQUEST_REFRESH = "Requests Refresh Rate"
+COLOR_TEMPLATE = "Color Templates"
+REQUESTED_ONLY = "Show only requests for that user - if Off it will show all requests"
+SIZE = "Size"
+OR_ICON_NAME = "or Icon Name"
+OMBI_URL = "Ombi V3 URL"
+OMBI_KEY = "Ombi V3 API Key"
+ENABLE_WEATHER = "Enable Weather Widget"
+WEATHER_AUTH = "Minimum authentication level to access Weather Widget"

+ 33 - 21
lang/es.ini

@@ -12,14 +12,14 @@ EMAIL_ADDRESS = "Correo electrónico"
 EMAIL = "Correo electrónico"
 PASSWORD = "Contraseña"
 PASSWORD_AGAIN = "Contraseña otra vez"
-ADMIN = "Administrador" 
-USER = "Usuario" 
-HOLD_UP = "¡Espera!" 
-LOOKS_LIKE_YOU_DONT_HAVE_ACCESS = "Parece que no tienes acceso." 
-USERNAME = "Nombre de usuario" 
-REMEMBER_ME = "Recuérdame" 
-FORGOT_PASSWORD = "¿Has olvidado tu contraseña?" 
-RESET_PASSWORD = "Restablecimiento de contraseña" 
+ADMIN = "Administrador"
+USER = "Usuario"
+HOLD_UP = "¡Espera!"
+LOOKS_LIKE_YOU_DONT_HAVE_ACCESS = "Parece que no tienes acceso."
+USERNAME = "Nombre de usuario"
+REMEMBER_ME = "Recuérdame"
+FORGOT_PASSWORD = "¿Has olvidado tu contraseña?"
+RESET_PASSWORD = "Restablecimiento de contraseña"
 DATABASE_PATH = "Camino de la base de datos"
 SPECIFY_LOCATION = "¿Dónde quieres guardar los archivos de la base de datos?"
 CURRENT_DIRECTORY = "Directorio actual"
@@ -86,20 +86,20 @@ INSTALLED_VERSION = "Versión instalada""
 CURRENT_VERSION = "Versión actual""
 DELETE_DATABASE = "Eliminar base de datos "
 DELETE_WARNING = "Haga esto solo si una actualización lo requiere. Esto eliminará su base de datos. No se pueda volver atrás y necesitará configurarlo todo, incluyendo las cuentas de usuario"
-SUBMIT_ISSUE = "Enviar un problema o una solicitud" 
-VIEW_ON_GITHUB = "Ver en GitHub" 
+SUBMIT_ISSUE = "Enviar un problema o una solicitud"
+VIEW_ON_GITHUB = "Ver en GitHub"
 CHAT_WITH_US = "Chatea con nosotros" T
-ABS_SAVED = "Pestañas guardadas" 
-APPLY_CHANGES = "Aplicar los cambios" 
-APPLY_RELOAD = "Aplicar cambios para actualizar la página" 
-OK = "OK" 
-COLORS_SAVED = "Colores guardados" 
-NEW_VERSION = "Nueva versión disponible" 
-CLICK_INFO = "Haga clic en la pestaña información" 
-WHATS_NEW = "Qué hay de nuevo en" 
-CHANGES = "Cambios" 
-AUTO_UPGRADE = "Actualización automática" 
-SOFTWARE_IS = "Software es" 
+ABS_SAVED = "Pestañas guardadas"
+APPLY_CHANGES = "Aplicar los cambios"
+APPLY_RELOAD = "Aplicar cambios para actualizar la página"
+OK = "OK"
+COLORS_SAVED = "Colores guardados"
+NEW_VERSION = "Nueva versión disponible"
+CLICK_INFO = "Haga clic en la pestaña información"
+WHATS_NEW = "Qué hay de nuevo en"
+CHANGES = "Cambios"
+AUTO_UPGRADE = "Actualización automática"
+SOFTWARE_IS = "Software es"
 UP_TO_DATE = "¡Actualizado!"
 PREVIOUS = "Previous"
 NEXT = "Next"
@@ -333,3 +333,15 @@ COUCH_URL = "Couchpotato URL"
 COUCH_KEY = "Couchpotato API/Key"
 DELETE_CHAT_DATABASE = "Delete Chat Database"
 INSTALLED_THEME = "Installed Theme"
+PLEX_TAB_URL = "Plex Tab URL - i.e. https://domain.com/plex or https://plex.domain.com"
+RECENT_REFRESH = "Recent Items Refresh Rate"
+NOW_PLAYING_REFRESH = "Now Playing Refresh Rate"
+REQUEST_REFRESH = "Requests Refresh Rate"
+COLOR_TEMPLATE = "Color Templates"
+REQUESTED_ONLY = "Show only requests for that user - if Off it will show all requests"
+SIZE = "Size"
+OR_ICON_NAME = "or Icon Name"
+OMBI_URL = "Ombi V3 URL"
+OMBI_KEY = "Ombi V3 API Key"
+ENABLE_WEATHER = "Enable Weather Widget"
+WEATHER_AUTH = "Minimum authentication level to access Weather Widget"

+ 13 - 1
lang/fr.ini

@@ -124,7 +124,7 @@ SIDE_BY_SIDE = "Vue côte à côte"
 SIDE_BY_SIDE_ABOUT = "Pour ceux qui sont multi-tâches, nous avons configuré un moyen facile pour vous de travailler sur deux choses à la fois. Pour commencer, voici les bases:"
 SIDE_BY_SIDE_INSTRUCTIONS1 = "Cliquez avec le bouton droit de la souris sur n’importe quel onglet pour mettre côte à côte."
 SIDE_BY_SIDE_INSTRUCTIONS2 = "Si vous aimeriez rafraîchir le côté droit, cliquez avec le bouton droit de la souris sur cet icône"
-SIDE_BY_SIDE_INSTRUCTIONS3 = "Quand vous avez terminé du côte à côte, utilisez le [esc] + [esc] raccourci clavier listé ci-dessous" 
+SIDE_BY_SIDE_INSTRUCTIONS3 = "Quand vous avez terminé du côte à côte, utilisez le [esc] + [esc] raccourci clavier listé ci-dessous"
 KEYBOARD_SHORTCUTS = "Raccourcis clavier"
 KEYBOARD_SHORTCUTS_ABOUT = "Organizer dispose de certains raccourcis clavier intégrés pour une utilisation encore plus facile.  Ceci est utilisables si Organizr est fixé et non en iFrame."
 KEYBOARD_INSTRUCTIONS1 = "Allé au menu Paramètres"
@@ -333,3 +333,15 @@ COUCH_URL = "Couchpotato URL"
 COUCH_KEY = "Couchpotato API/Key"
 DELETE_CHAT_DATABASE = "Delete Chat Database"
 INSTALLED_THEME = "Installed Theme"
+PLEX_TAB_URL = "Plex Tab URL - i.e. https://domain.com/plex or https://plex.domain.com"
+RECENT_REFRESH = "Recent Items Refresh Rate"
+NOW_PLAYING_REFRESH = "Now Playing Refresh Rate"
+REQUEST_REFRESH = "Requests Refresh Rate"
+COLOR_TEMPLATE = "Color Templates"
+REQUESTED_ONLY = "Show only requests for that user - if Off it will show all requests"
+SIZE = "Size"
+OR_ICON_NAME = "or Icon Name"
+OMBI_URL = "Ombi V3 URL"
+OMBI_KEY = "Ombi V3 API Key"
+ENABLE_WEATHER = "Enable Weather Widget"
+WEATHER_AUTH = "Minimum authentication level to access Weather Widget"

+ 12 - 0
lang/it.ini

@@ -333,3 +333,15 @@ COUCH_URL = "Couchpotato URL"
 COUCH_KEY = "Couchpotato API/Key"
 DELETE_CHAT_DATABASE = "Delete Chat Database"
 INSTALLED_THEME = "Installed Theme"
+PLEX_TAB_URL = "Plex Tab URL - i.e. https://domain.com/plex or https://plex.domain.com"
+RECENT_REFRESH = "Recent Items Refresh Rate"
+NOW_PLAYING_REFRESH = "Now Playing Refresh Rate"
+REQUEST_REFRESH = "Requests Refresh Rate"
+COLOR_TEMPLATE = "Color Templates"
+REQUESTED_ONLY = "Show only requests for that user - if Off it will show all requests"
+SIZE = "Size"
+OR_ICON_NAME = "or Icon Name"
+OMBI_URL = "Ombi V3 URL"
+OMBI_KEY = "Ombi V3 API Key"
+ENABLE_WEATHER = "Enable Weather Widget"
+WEATHER_AUTH = "Minimum authentication level to access Weather Widget"

+ 12 - 0
lang/nl.ini

@@ -333,3 +333,15 @@ COUCH_URL = "Couchpotato URL"
 COUCH_KEY = "Couchpotato API/Key"
 DELETE_CHAT_DATABASE = "Delete Chat Database"
 INSTALLED_THEME = "Installed Theme"
+PLEX_TAB_URL = "Plex Tab URL - i.e. https://domain.com/plex or https://plex.domain.com"
+RECENT_REFRESH = "Recent Items Refresh Rate"
+NOW_PLAYING_REFRESH = "Now Playing Refresh Rate"
+REQUEST_REFRESH = "Requests Refresh Rate"
+COLOR_TEMPLATE = "Color Templates"
+REQUESTED_ONLY = "Show only requests for that user - if Off it will show all requests"
+SIZE = "Size"
+OR_ICON_NAME = "or Icon Name"
+OMBI_URL = "Ombi V3 URL"
+OMBI_KEY = "Ombi V3 API Key"
+ENABLE_WEATHER = "Enable Weather Widget"
+WEATHER_AUTH = "Minimum authentication level to access Weather Widget"

+ 12 - 0
lang/pl.ini

@@ -333,3 +333,15 @@ COUCH_URL = "Couchpotato URL"
 COUCH_KEY = "Couchpotato API/Key"
 DELETE_CHAT_DATABASE = "Delete Chat Database"
 INSTALLED_THEME = "Installed Theme"
+PLEX_TAB_URL = "Plex Tab URL - i.e. https://domain.com/plex or https://plex.domain.com"
+RECENT_REFRESH = "Recent Items Refresh Rate"
+NOW_PLAYING_REFRESH = "Now Playing Refresh Rate"
+REQUEST_REFRESH = "Requests Refresh Rate"
+COLOR_TEMPLATE = "Color Templates"
+REQUESTED_ONLY = "Show only requests for that user - if Off it will show all requests"
+SIZE = "Size"
+OR_ICON_NAME = "or Icon Name"
+OMBI_URL = "Ombi V3 URL"
+OMBI_KEY = "Ombi V3 API Key"
+ENABLE_WEATHER = "Enable Weather Widget"
+WEATHER_AUTH = "Minimum authentication level to access Weather Widget"

Разница между файлами не показана из-за своего большого размера
+ 416 - 228
settings.php


+ 138 - 70
user.php

@@ -7,17 +7,17 @@
 	 *	entry is assigned a new random token,  which is used in
 	 * salting subsequent password checks.
 	 */
-	
+
 	// Include functions if not already included
 	require_once('functions.php');
-	 
+
     // Autoload frameworks
 	require_once(__DIR__ . '/vendor/autoload.php');
-	
+
     // Lazyload settings
 	$databaseConfig = configLazy(__DIR__ . '/config/config.php');
 
-    if(file_exists('custom.css')) : define('CUSTOMCSS', 'true'); else : define('CUSTOMCSS', 'false'); endif; 
+    if(file_exists('custom.css')) : define('CUSTOMCSS', 'true'); else : define('CUSTOMCSS', 'false'); endif;
     $notifyExplode = explode("-", NOTIFYEFFECT);
     define('FAIL_LOG', 'loginLog.json');
     @date_default_timezone_set(TIMEZONE);
@@ -28,8 +28,6 @@
     }
 
 	define('GUEST_HASH', "guest-".guestHash(0, 5));
-	$group = new User();
-	$group = $group->role;
 
 	class User
 	{
@@ -121,15 +119,16 @@
 		// the user's email address, if logged in.
 		var $email = "";
 		var $adminEmail = "";
+		var $adminList = array();
 		// the user's role in the system
 		var $role = "";
 		var $group = "";
 		// global database handle
 		var $database = false;
-        
+
         //EMAIL SHIT
         function startEmail($email, $username, $subject, $body){
-            
+
             $mail = new PHPMailer;
             $mail->isSMTP();
             $mail->Host = SMTPHOST;
@@ -151,9 +150,9 @@
             } else {
                 $this->info('E-Mail sent!');
             }
-            
+
         }
-       
+
 		// class object constructor
 		function __construct($registration_callback=false)
 		{
@@ -216,6 +215,7 @@
 			$this->userdir = ($this->username !=User::GUEST_USER? USER_HOME . $this->username : false);
 			$this->email = $this->get_user_email($this->username);
 			$this->adminEmail = $this->get_admin_email();
+			$this->adminList = $this->get_admin_list();
 			$this->role = $this->get_user_role($this->username);
 			//$this->group = $this->get_user_group($this->username);
 			// clear database
@@ -243,7 +243,7 @@
 				$this->info("<strong>log in error:</strong> password did not pass validation");
 				return false; }
 			// step 2: if validation passed, log the user in
-			return $this->login_user($username, $sha1, $rememberMe == "true", $password); 
+			return $this->login_user($username, $sha1, $rememberMe == "true", $password);
 		}
 		/**
 		 * Called when the requested POST operation is "logout"
@@ -283,6 +283,14 @@
 			$email = $_POST["email"];
 			$sha1 = $_POST["sha1"];
 			$settings = $_POST["settings"];
+			$validate = (isset($_POST["validate"])) ? $_POST["validate"] : null;
+			if(REGISTERPASSWORD != ""){
+				if($validate == REGISTERPASSWORD){
+					$validate = true;
+				}
+			}else{
+				$validate = null;
+			}
 			// step 1: someone could have bypassed the javascript validation, so validate again.
 			if(!$this->validate_user_name($username)) {
 				$this->info("<strong>registration error:</strong> user name did not pass validation");
@@ -294,25 +302,7 @@
 				$this->info("<strong>registration error:</strong> password did not pass validation");
 				return false; }
 			// step 2: if validation passed, register user
-			$registered = $this->register_user($username, $email, $sha1, $registration_callback, $settings);
-			if($registered && User::use_mail)
-			{
-				// send email notification
-				$subject = "Welcome to ".DOMAIN;
-				$language = new setLanguage;
-				$domain = getServerPath();
-				$body = orgEmail(
-					$header = $language->translate('EMAIL_NEWUSER_HEADER'),
-					$title = $language->translate('EMAIL_NEWUSER_TITLE'), 
-					$user = $username, 
-					$mainMessage =$language->translate('EMAIL_NEWUSER_MESSAGE'),
-					$button = $language->translate('EMAIL_NEWUSER_BUTTON'),
-					$buttonURL = $domain, 
-					$subTitle = $language->translate('EMAIL_NEWUSER_SUBTITLE'), 
-					$subMessage = $language->translate('EMAIL_NEWUSER_SUBMESSAGE')
-					);
-                $this->startEmail($email, $username, $subject, $body);
-			}
+			$registered = $this->register_user($username, $email, $sha1, $registration_callback, $settings, $validate);
 			return $registered;
 		}
 		/**
@@ -348,7 +338,7 @@
 			if($email !="" && preg_match(User::emailregexp, $email)==0) {
 				$this->info("<strong>invite error:</strong> email address did not pass validation");
 				writeLog("error", "$email didn't pass validation");
-				return false; 
+				return false;
 			}
 			// step 2: if validation passed, send the user's information for invite
 			return $this->invite_user($username, $email, $server);
@@ -386,12 +376,12 @@
 			$domain = getServerPath();
 			$body = orgEmail(
 					$header = $language->translate('EMAIL_RESET_HEADER'),
-					$title = $language->translate('EMAIL_RESET_TITLE'), 
-					$user = $username, 
+					$title = $language->translate('EMAIL_RESET_TITLE'),
+					$user = $username,
 					$mainMessage =$language->translate('EMAIL_RESET_MESSAGE')."<br/>".$newpassword,
 					$button = $language->translate('EMAIL_RESET_BUTTON'),
-					$buttonURL = $domain, 
-					$subTitle = $language->translate('EMAIL_RESET_SUBTITLE'), 
+					$buttonURL = $domain,
+					$subTitle = $language->translate('EMAIL_RESET_SUBTITLE'),
 					$subMessage = $language->translate('EMAIL_RESET_SUBMESSAGE')
 					);
             $this->startEmail($email, $username, $subject, $body);
@@ -419,6 +409,12 @@
             unset($_COOKIE['cookiePassword']);
             setcookie("cookiePassword", '', time() - 3600, '/', DOMAIN);
             setcookie("cookiePassword", '', time() - 3600, '/');
+			unset($_COOKIE['Auth']);
+            setcookie("Auth", '', time() - 3600, '/', DOMAIN);
+            setcookie("Auth", '', time() - 3600, '/');
+			unset($_COOKIE['mpt']);
+            setcookie("mpt", '', time() - 3600, '/', DOMAIN);
+            setcookie("mpt", '', time() - 3600, '/');
 		}
 		/**
 		 * Validate a username. Empty usernames or names
@@ -452,11 +448,11 @@
 		{
 			// actually logged in?
 			if($this->is_user_active($username)===false) { return false; }
-            
+
 			// logged in, but do the tokens match?
 			$token = $this->get_user_token($username);
             if(MULTIPLELOGIN == "false"){
-            
+
                 if(isset($_COOKIE["Organizr"])){
                     if($_COOKIE["Organizr"] == $token){
                         return true;
@@ -471,28 +467,34 @@
                         unset($_COOKIE['cookiePassword']);
                         setcookie("cookiePassword", '', time() - 3600, '/', DOMAIN);
                         setcookie("cookiePassword", '', time() - 3600, '/');
+						unset($_COOKIE['Auth']);
+			            setcookie("Auth", '', time() - 3600, '/', DOMAIN);
+			            setcookie("Auth", '', time() - 3600, '/');
+						unset($_COOKIE['mpt']);
+			            setcookie("mpt", '', time() - 3600, '/', DOMAIN);
+			            setcookie("mpt", '', time() - 3600, '/');
                         return false;
                     }
                 }else{
                     if($token != $_SESSION["token"]) {
-                        
+
                         $this->error("token mismatch for $username");
-                        return false; 
-                    
+                        return false;
+
                     }
                     // active, using the correct token -> authenticated
                      setcookie("cookiePassword", COOKIEPASSWORD, time() + (86400 * 7), "/", DOMAIN);
                      return true;
-                    
+
                 }
-                
+
             }else{
-                
+
                 setcookie("cookiePassword", COOKIEPASSWORD, time() + (86400 * 7), "/", DOMAIN);
                 return true;
-                
-            }    
-            
+
+            }
+
 		}
 		/**
 		 * Unicode friendly(ish) version of strtolower
@@ -533,15 +535,39 @@
 		 * is profile information that can be set, but in no way
 		 * needs to be, in the user's profile section
 		 */
-		function register_user($username, $email, $sha1, &$registration_callback = false, $settings) {
+		function register_user($username, $email, $sha1, &$registration_callback = false, $settings, $validate) {
 			$username = strtolower($username);
 			$dbpassword = $this->token_hash_password($username, $sha1, "");
 			if($dbpassword==$sha1) die("password hashing is not implemented.");
-            $newRole = "admin"; 
+            $newRole = "admin";
             $queryAdmin = "SELECT username FROM users";
             foreach($this->database->query($queryAdmin) as $data) {
                 $newRole = "user";
             }
+			if($newRole == "user" && $validate == null){
+				writeLog("error", "$username on IP ".$_SERVER['REMOTE_ADDR']." is trying to hack your Organizr");
+				$this->error = "Hack attempt has been made. What are you doing? Logging your IP now...?";
+				$this->error("Hack attempt has been made. What are you doing? Logging your IP now...");
+				return false;
+			}
+			if($username && User::use_mail)
+			{
+				// send email notification
+				$subject = "Welcome to ".DOMAIN;
+				$language = new setLanguage;
+				$domain = getServerPath();
+				$body = orgEmail(
+					$header = $language->translate('EMAIL_NEWUSER_HEADER'),
+					$title = $language->translate('EMAIL_NEWUSER_TITLE'),
+					$user = $username,
+					$mainMessage =$language->translate('EMAIL_NEWUSER_MESSAGE'),
+					$button = $language->translate('EMAIL_NEWUSER_BUTTON'),
+					$buttonURL = $domain,
+					$subTitle = $language->translate('EMAIL_NEWUSER_SUBTITLE'),
+					$subMessage = $language->translate('EMAIL_NEWUSER_SUBMESSAGE')
+					);
+                $this->startEmail($email, $username, $subject, $body);
+			}
 			// Does user already exist? (see notes on safe reporting)
 			if(User::unsafe_reporting) {
 				$query = "SELECT username FROM users WHERE username LIKE '$username' COLLATE NOCASE";
@@ -550,7 +576,7 @@
 					$this->error = "this user name is already being used by someone else.";
                     $this->error("this user name is already being used by someone else.");
 					return false; }
-			} else {	
+			} else {
 				$query = "SELECT username FROM users";
 				$usernames = array();
 				foreach($this->database->query($query) as $data) { $usernames[] = $this->homogenise_username($data["username"]); }
@@ -567,7 +593,7 @@
 					$this->info("user account for $username not created.");
 					$this->error = "this email address is already in use by someone else.";
 					$this->error("this email address is already in use by someone else.");
-					return false; 
+					return false;
 				}
 			} else {
 				$email = $this->random_ascii_string(32).'@placeholder.eml';
@@ -599,16 +625,16 @@
 		 */
 		function login_user($username, $sha1, $remember, $password, $surface = true) {
 			$username = strtolower($username);
-			
+
             $buildLog = function($username, $authType) {
                 if(file_exists(FAIL_LOG)) {
                     $getFailLog = str_replace("\r\ndate", "date", file_get_contents(FAIL_LOG));
                     $gotFailLog = json_decode($getFailLog, true);
                 }
-                
+
                 $failLogEntryFirst = array('logType' => 'login_log', 'auth' => array(array('date' => date("Y-m-d H:i:s"), 'username' => $username, 'ip' => $_SERVER['REMOTE_ADDR'], 'auth_type' => $authType)));
                 $failLogEntry = array('date' => date("Y-m-d H:i:s"), 'username' => $username, 'ip' => $_SERVER['REMOTE_ADDR'], 'auth_type' => $authType);
-                if(isset($gotFailLog)) { 
+                if(isset($gotFailLog)) {
                     array_push($gotFailLog["auth"], $failLogEntry);
                     $writeFailLog = str_replace("date", "\r\ndate", json_encode($gotFailLog));
                 } else {
@@ -616,7 +642,7 @@
                 }
                 return $writeFailLog;
             };
-			
+
 			// External Authentication
 			$authSuccess = false;
 			$function = 'plugin_auth_'.AUTHBACKEND;
@@ -640,14 +666,14 @@
 							} else {
 								// Legacy - Less Secure
 								$dbpassword = $this->token_hash_password($username, $sha1, $this->get_user_token($username));
-								if($dbpassword==$data["password"]) { 
+								if($dbpassword==$data["password"]) {
 									$authSuccess = true;
 								}
 							}
 						}
 					}
 			}
-			
+
 			if ($authSuccess) {
 				// Make sure user exists in database
 				$query = "SELECT username FROM users WHERE username = '".$username."' COLLATE NOCASE";
@@ -656,7 +682,7 @@
 					$userExists = true;
 					break;
 				}
-				
+
 				if ($userExists) {
 					// authentication passed - 1) mark active and update token
 					$this->mark_user_active($username);
@@ -665,18 +691,27 @@
 					if($remember == "true") {
 						setcookie("Organizr", $this->get_user_token($username), time() + (86400 * 7), "/", DOMAIN);
 						setcookie("OrganizrU", $username, time() + (86400 * 7), "/", DOMAIN);
-						
+
+					}
+					if(OMBIURL){
+						$ombiToken = getOmbiToken($username, $password);
+						if($ombiToken){
+							setcookie("Auth", $ombiToken, time() + (86400 * 7), "/", DOMAIN);
+						}
+					}
+					if(PLEXURL && isset($authSuccess['token'])){
+						setcookie("mpt", $authSuccess['token'], time() + (86400 * 7), "/", DOMAIN);
 					}
 					$this->info("Welcome $username");
 					file_put_contents(FAIL_LOG, $buildLog($username, "good_auth"));
 					chmod(FAIL_LOG, 0660);
 					setcookie("cookiePassword", COOKIEPASSWORD, time() + (86400 * 7), "/", DOMAIN);
      				writeLog("success", "$username has logged in");
-					return true; 
+					return true;
 				} else if (AUTHBACKENDCREATE !== 'false' && $surface) {
 					// Create User
 					$falseByRef = false;
-					$this->register_user($username, (is_array($authSuccess) && isset($authSuccess['email']) ? $authSuccess['email'] : ''), $sha1, $falseByRef, !$remember);
+					$this->register_user($username, (is_array($authSuccess) && isset($authSuccess['email']) ? $authSuccess['email'] : ''), $sha1, $falseByRef, !$remember, true);
 				} else {
 					// authentication failed
 					//$this->info("Successful Backend Auth, No User in DB, Create Set to False");
@@ -684,7 +719,7 @@
 					chmod(FAIL_LOG, 0660);
 					if(User::unsafe_reporting) { $this->error = "Successful Backend Auth, $username not in DB, Create Set to False."; $this->error("Successful Backend Auth, $username not in DB, Create Set to False."); }
 					else { $this->error = "Not permitted to login as this user, please contact an administrator."; $this->error("Not permitted to login as this user, please contact an administrator"); }
-					return false; 
+					return false;
 				}
 			} else if (!$authSuccess) {
 				// authentication failed
@@ -694,7 +729,7 @@
 				chmod(FAIL_LOG, 0660);
 				if(User::unsafe_reporting) { $this->error = "incorrect password for $username."; $this->error("incorrect password for $username."); }
 				else { $this->error = "the specified username/password combination is incorrect."; $this->error("the specified username/password combination is incorrect."); }
-				return false; 
+				return false;
 			} else {
 				// authentication could not take place
 				//$this->info("there was no user $username in the database");
@@ -710,6 +745,27 @@
 		 */
 		function update_user($username, $email, $sha1, $role)
 		{
+			//Admin bypass
+			if(!in_arrayi($_SESSION["username"], $this->get_admin_list())){
+				// logged in, but do the tokens match?
+				$token = $this->get_user_token($username);
+				if($token != $_SESSION["token"]) {
+					writeLog("error", "$username has requested info update using token: $token");
+					$this->error("token mismatch for $username");
+					return false;
+				}else{
+					writeLog("success", "$username token has been validated");
+				}
+			}else{
+				$token = $this->get_user_token($_SESSION["username"]);
+				if($token != $_SESSION["token"]) {
+					writeLog("error", $_SESSION["username"]." has requested info update using token: $token");
+					$this->error("token mismatch for ".$_SESSION["username"]);
+					return false;
+				}else{
+					writeLog("success", "Admin Override on update for $username info");
+				}
+			}
 			if($email !="") {
 				$update = "UPDATE users SET email = '$email' WHERE username = '$username' COLLATE NOCASE";
 				$this->database->exec($update); }
@@ -735,7 +791,7 @@
     		writeLog("success", "PLEX INVITE: $id has been deleted");
 			return true;
 		}
-		
+
 		/**
 		 * Invite using a user's information
 		 */
@@ -763,12 +819,12 @@
 				$subject = DOMAIN . " $uServer ".$language->translate('INVITE_CODE');
 				$body = orgEmail(
 					$header = explosion($language->translate('EMAIL_INVITE_HEADER'), 0)." ".$uServer." ".explosion($language->translate('EMAIL_INVITE_HEADER'), 1),
-					$title = $language->translate('EMAIL_INVITE_TITLE'), 
-					$user = $username, 
+					$title = $language->translate('EMAIL_INVITE_TITLE'),
+					$user = $username,
 					$mainMessage = explosion($language->translate('EMAIL_INVITE_MESSAGE'), 0)." ".$uServer." ".explosion($language->translate('EMAIL_INVITE_MESSAGE'), 1)." ".$inviteCode,
 					$button = explosion($language->translate('EMAIL_INVITE_BUTTON'), 0)." ".$uServer." ".explosion($language->translate('EMAIL_INVITE_BUTTON'), 1),
-					$buttonURL = $link, 
-					$subTitle = $language->translate('EMAIL_INVITE_SUBTITLE'), 
+					$buttonURL = $link,
+					$subTitle = $language->translate('EMAIL_INVITE_SUBTITLE'),
 					$subMessage = explosion($language->translate('EMAIL_INVITE_SUBMESSAGE'), 0)." <a href='".$domain."?inviteCode'>".$domain."</a> ".explosion($language->translate('EMAIL_INVITE_SUBMESSAGE'), 1)
 					);
                 $this->startEmail($email, $username, $subject, $body);
@@ -792,6 +848,12 @@
             unset($_COOKIE['cookiePassword']);
             setcookie("cookiePassword", '', time() - 3600, '/', DOMAIN);
             setcookie("cookiePassword", '', time() - 3600, '/');
+			unset($_COOKIE['Auth']);
+            setcookie("Auth", '', time() - 3600, '/', DOMAIN);
+            setcookie("Auth", '', time() - 3600, '/');
+			unset($_COOKIE['mpt']);
+            setcookie("mpt", '', time() - 3600, '/', DOMAIN);
+            setcookie("mpt", '', time() - 3600, '/');
    			writeLog("success", "$username has signed out");
 			return true;
 		}
@@ -816,7 +878,7 @@
 		 */
 		function token_hash_password($username, $sha1, $token)
 		{
-			
+
 			return hash("sha256",($this->database->query('SELECT username FROM users WHERE username = \''.$username.'\' COLLATE NOCASE')->fetch()['username']).$sha1.$token);
 		}
 		/**
@@ -835,6 +897,12 @@
 			foreach($this->database->query($query) as $data) { return $data["email"]; }
 			return "";
 		}
+		function get_admin_list()
+		{
+			$query = "SELECT username FROM users WHERE role = 'admin' COLLATE NOCASE";
+			foreach($this->database->query($query) as $data) { $list[] =  $data['username']; }
+			if(!empty($list)){ return $list; } else { return false; }
+		}
 		/**
 		 * Get a user's role
 		 */
@@ -845,7 +913,7 @@
 				foreach($this->database->query($query) as $data) { return $data["role"]; }}
 			return "guest";
 		}
-        
+
        /* function get_user_group($username)
 		{
 			if($username && $username !="" && $username !=User::GUEST_USER) {
@@ -876,7 +944,7 @@
 			$update = "UPDATE users SET password = '$newpassword' WHERE username = '$username' COLLATE NOCASE";
 			$this->database->exec($update);
 			if($noMsg == "false"){
-                $this->info("token and password updated for <strong>$username</strong>");   
+                $this->info("token and password updated for <strong>$username</strong>");
             }
 			return $token;
 		}

+ 169 - 0
vendor/composer/autoload_classmap.php

@@ -6,12 +6,181 @@ $vendorDir = dirname(dirname(__FILE__));
 $baseDir = dirname($vendorDir);
 
 return array(
+    'Clue\\StreamFilter\\CallbackFilter' => $vendorDir . '/clue/stream-filter/src/CallbackFilter.php',
     'EasyPeasyICS' => $vendorDir . '/phpmailer/phpmailer/extras/EasyPeasyICS.php',
+    'GuzzleHttp\\Client' => $vendorDir . '/guzzlehttp/guzzle/src/Client.php',
+    'GuzzleHttp\\ClientInterface' => $vendorDir . '/guzzlehttp/guzzle/src/ClientInterface.php',
+    'GuzzleHttp\\Cookie\\CookieJar' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/CookieJar.php',
+    'GuzzleHttp\\Cookie\\CookieJarInterface' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php',
+    'GuzzleHttp\\Cookie\\FileCookieJar' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php',
+    'GuzzleHttp\\Cookie\\SessionCookieJar' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php',
+    'GuzzleHttp\\Cookie\\SetCookie' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/SetCookie.php',
+    'GuzzleHttp\\Exception\\BadResponseException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/BadResponseException.php',
+    'GuzzleHttp\\Exception\\ClientException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ClientException.php',
+    'GuzzleHttp\\Exception\\ConnectException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ConnectException.php',
+    'GuzzleHttp\\Exception\\GuzzleException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/GuzzleException.php',
+    'GuzzleHttp\\Exception\\RequestException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/RequestException.php',
+    'GuzzleHttp\\Exception\\SeekException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/SeekException.php',
+    'GuzzleHttp\\Exception\\ServerException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ServerException.php',
+    'GuzzleHttp\\Exception\\TooManyRedirectsException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php',
+    'GuzzleHttp\\Exception\\TransferException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/TransferException.php',
+    'GuzzleHttp\\HandlerStack' => $vendorDir . '/guzzlehttp/guzzle/src/HandlerStack.php',
+    'GuzzleHttp\\Handler\\CurlFactory' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlFactory.php',
+    'GuzzleHttp\\Handler\\CurlFactoryInterface' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php',
+    'GuzzleHttp\\Handler\\CurlHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlHandler.php',
+    'GuzzleHttp\\Handler\\CurlMultiHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php',
+    'GuzzleHttp\\Handler\\EasyHandle' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/EasyHandle.php',
+    'GuzzleHttp\\Handler\\MockHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/MockHandler.php',
+    'GuzzleHttp\\Handler\\Proxy' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/Proxy.php',
+    'GuzzleHttp\\Handler\\StreamHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/StreamHandler.php',
+    'GuzzleHttp\\MessageFormatter' => $vendorDir . '/guzzlehttp/guzzle/src/MessageFormatter.php',
+    'GuzzleHttp\\Middleware' => $vendorDir . '/guzzlehttp/guzzle/src/Middleware.php',
+    'GuzzleHttp\\Pool' => $vendorDir . '/guzzlehttp/guzzle/src/Pool.php',
+    'GuzzleHttp\\PrepareBodyMiddleware' => $vendorDir . '/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php',
+    'GuzzleHttp\\Promise\\AggregateException' => $vendorDir . '/guzzlehttp/promises/src/AggregateException.php',
+    'GuzzleHttp\\Promise\\CancellationException' => $vendorDir . '/guzzlehttp/promises/src/CancellationException.php',
+    'GuzzleHttp\\Promise\\Coroutine' => $vendorDir . '/guzzlehttp/promises/src/Coroutine.php',
+    'GuzzleHttp\\Promise\\EachPromise' => $vendorDir . '/guzzlehttp/promises/src/EachPromise.php',
+    'GuzzleHttp\\Promise\\FulfilledPromise' => $vendorDir . '/guzzlehttp/promises/src/FulfilledPromise.php',
+    'GuzzleHttp\\Promise\\Promise' => $vendorDir . '/guzzlehttp/promises/src/Promise.php',
+    'GuzzleHttp\\Promise\\PromiseInterface' => $vendorDir . '/guzzlehttp/promises/src/PromiseInterface.php',
+    'GuzzleHttp\\Promise\\PromisorInterface' => $vendorDir . '/guzzlehttp/promises/src/PromisorInterface.php',
+    'GuzzleHttp\\Promise\\RejectedPromise' => $vendorDir . '/guzzlehttp/promises/src/RejectedPromise.php',
+    'GuzzleHttp\\Promise\\RejectionException' => $vendorDir . '/guzzlehttp/promises/src/RejectionException.php',
+    'GuzzleHttp\\Promise\\TaskQueue' => $vendorDir . '/guzzlehttp/promises/src/TaskQueue.php',
+    'GuzzleHttp\\Promise\\TaskQueueInterface' => $vendorDir . '/guzzlehttp/promises/src/TaskQueueInterface.php',
+    'GuzzleHttp\\Psr7\\AppendStream' => $vendorDir . '/guzzlehttp/psr7/src/AppendStream.php',
+    'GuzzleHttp\\Psr7\\BufferStream' => $vendorDir . '/guzzlehttp/psr7/src/BufferStream.php',
+    'GuzzleHttp\\Psr7\\CachingStream' => $vendorDir . '/guzzlehttp/psr7/src/CachingStream.php',
+    'GuzzleHttp\\Psr7\\DroppingStream' => $vendorDir . '/guzzlehttp/psr7/src/DroppingStream.php',
+    'GuzzleHttp\\Psr7\\FnStream' => $vendorDir . '/guzzlehttp/psr7/src/FnStream.php',
+    'GuzzleHttp\\Psr7\\InflateStream' => $vendorDir . '/guzzlehttp/psr7/src/InflateStream.php',
+    'GuzzleHttp\\Psr7\\LazyOpenStream' => $vendorDir . '/guzzlehttp/psr7/src/LazyOpenStream.php',
+    'GuzzleHttp\\Psr7\\LimitStream' => $vendorDir . '/guzzlehttp/psr7/src/LimitStream.php',
+    'GuzzleHttp\\Psr7\\MessageTrait' => $vendorDir . '/guzzlehttp/psr7/src/MessageTrait.php',
+    'GuzzleHttp\\Psr7\\MultipartStream' => $vendorDir . '/guzzlehttp/psr7/src/MultipartStream.php',
+    'GuzzleHttp\\Psr7\\NoSeekStream' => $vendorDir . '/guzzlehttp/psr7/src/NoSeekStream.php',
+    'GuzzleHttp\\Psr7\\PumpStream' => $vendorDir . '/guzzlehttp/psr7/src/PumpStream.php',
+    'GuzzleHttp\\Psr7\\Request' => $vendorDir . '/guzzlehttp/psr7/src/Request.php',
+    'GuzzleHttp\\Psr7\\Response' => $vendorDir . '/guzzlehttp/psr7/src/Response.php',
+    'GuzzleHttp\\Psr7\\ServerRequest' => $vendorDir . '/guzzlehttp/psr7/src/ServerRequest.php',
+    'GuzzleHttp\\Psr7\\Stream' => $vendorDir . '/guzzlehttp/psr7/src/Stream.php',
+    'GuzzleHttp\\Psr7\\StreamDecoratorTrait' => $vendorDir . '/guzzlehttp/psr7/src/StreamDecoratorTrait.php',
+    'GuzzleHttp\\Psr7\\StreamWrapper' => $vendorDir . '/guzzlehttp/psr7/src/StreamWrapper.php',
+    'GuzzleHttp\\Psr7\\UploadedFile' => $vendorDir . '/guzzlehttp/psr7/src/UploadedFile.php',
+    'GuzzleHttp\\Psr7\\Uri' => $vendorDir . '/guzzlehttp/psr7/src/Uri.php',
+    'GuzzleHttp\\Psr7\\UriNormalizer' => $vendorDir . '/guzzlehttp/psr7/src/UriNormalizer.php',
+    'GuzzleHttp\\Psr7\\UriResolver' => $vendorDir . '/guzzlehttp/psr7/src/UriResolver.php',
+    'GuzzleHttp\\RedirectMiddleware' => $vendorDir . '/guzzlehttp/guzzle/src/RedirectMiddleware.php',
+    'GuzzleHttp\\RequestOptions' => $vendorDir . '/guzzlehttp/guzzle/src/RequestOptions.php',
+    'GuzzleHttp\\RetryMiddleware' => $vendorDir . '/guzzlehttp/guzzle/src/RetryMiddleware.php',
+    'GuzzleHttp\\TransferStats' => $vendorDir . '/guzzlehttp/guzzle/src/TransferStats.php',
+    'GuzzleHttp\\UriTemplate' => $vendorDir . '/guzzlehttp/guzzle/src/UriTemplate.php',
+    'Http\\Adapter\\Guzzle6\\Client' => $vendorDir . '/php-http/guzzle6-adapter/src/Client.php',
+    'Http\\Adapter\\Guzzle6\\Promise' => $vendorDir . '/php-http/guzzle6-adapter/src/Promise.php',
+    'Http\\Client\\Exception' => $vendorDir . '/php-http/httplug/src/Exception.php',
+    'Http\\Client\\Exception\\HttpException' => $vendorDir . '/php-http/httplug/src/Exception/HttpException.php',
+    'Http\\Client\\Exception\\NetworkException' => $vendorDir . '/php-http/httplug/src/Exception/NetworkException.php',
+    'Http\\Client\\Exception\\RequestException' => $vendorDir . '/php-http/httplug/src/Exception/RequestException.php',
+    'Http\\Client\\Exception\\TransferException' => $vendorDir . '/php-http/httplug/src/Exception/TransferException.php',
+    'Http\\Client\\HttpAsyncClient' => $vendorDir . '/php-http/httplug/src/HttpAsyncClient.php',
+    'Http\\Client\\HttpClient' => $vendorDir . '/php-http/httplug/src/HttpClient.php',
+    'Http\\Client\\Promise\\HttpFulfilledPromise' => $vendorDir . '/php-http/httplug/src/Promise/HttpFulfilledPromise.php',
+    'Http\\Client\\Promise\\HttpRejectedPromise' => $vendorDir . '/php-http/httplug/src/Promise/HttpRejectedPromise.php',
+    'Http\\Discovery\\ClassDiscovery' => $vendorDir . '/php-http/discovery/src/ClassDiscovery.php',
+    'Http\\Discovery\\Exception' => $vendorDir . '/php-http/discovery/src/Exception.php',
+    'Http\\Discovery\\Exception\\ClassInstantiationFailedException' => $vendorDir . '/php-http/discovery/src/Exception/ClassInstantiationFailedException.php',
+    'Http\\Discovery\\Exception\\DiscoveryFailedException' => $vendorDir . '/php-http/discovery/src/Exception/DiscoveryFailedException.php',
+    'Http\\Discovery\\Exception\\NotFoundException' => $vendorDir . '/php-http/discovery/src/Exception/NotFoundException.php',
+    'Http\\Discovery\\Exception\\PuliUnavailableException' => $vendorDir . '/php-http/discovery/src/Exception/PuliUnavailableException.php',
+    'Http\\Discovery\\Exception\\StrategyUnavailableException' => $vendorDir . '/php-http/discovery/src/Exception/StrategyUnavailableException.php',
+    'Http\\Discovery\\HttpAsyncClientDiscovery' => $vendorDir . '/php-http/discovery/src/HttpAsyncClientDiscovery.php',
+    'Http\\Discovery\\HttpClientDiscovery' => $vendorDir . '/php-http/discovery/src/HttpClientDiscovery.php',
+    'Http\\Discovery\\MessageFactoryDiscovery' => $vendorDir . '/php-http/discovery/src/MessageFactoryDiscovery.php',
+    'Http\\Discovery\\NotFoundException' => $vendorDir . '/php-http/discovery/src/NotFoundException.php',
+    'Http\\Discovery\\Strategy\\CommonClassesStrategy' => $vendorDir . '/php-http/discovery/src/Strategy/CommonClassesStrategy.php',
+    'Http\\Discovery\\Strategy\\DiscoveryStrategy' => $vendorDir . '/php-http/discovery/src/Strategy/DiscoveryStrategy.php',
+    'Http\\Discovery\\Strategy\\MockClientStrategy' => $vendorDir . '/php-http/discovery/src/Strategy/MockClientStrategy.php',
+    'Http\\Discovery\\Strategy\\PuliBetaStrategy' => $vendorDir . '/php-http/discovery/src/Strategy/PuliBetaStrategy.php',
+    'Http\\Discovery\\StreamFactoryDiscovery' => $vendorDir . '/php-http/discovery/src/StreamFactoryDiscovery.php',
+    'Http\\Discovery\\UriFactoryDiscovery' => $vendorDir . '/php-http/discovery/src/UriFactoryDiscovery.php',
+    'Http\\Message\\Authentication' => $vendorDir . '/php-http/message/src/Authentication.php',
+    'Http\\Message\\Authentication\\AutoBasicAuth' => $vendorDir . '/php-http/message/src/Authentication/AutoBasicAuth.php',
+    'Http\\Message\\Authentication\\BasicAuth' => $vendorDir . '/php-http/message/src/Authentication/BasicAuth.php',
+    'Http\\Message\\Authentication\\Bearer' => $vendorDir . '/php-http/message/src/Authentication/Bearer.php',
+    'Http\\Message\\Authentication\\Chain' => $vendorDir . '/php-http/message/src/Authentication/Chain.php',
+    'Http\\Message\\Authentication\\Matching' => $vendorDir . '/php-http/message/src/Authentication/Matching.php',
+    'Http\\Message\\Authentication\\QueryParam' => $vendorDir . '/php-http/message/src/Authentication/QueryParam.php',
+    'Http\\Message\\Authentication\\RequestConditional' => $vendorDir . '/php-http/message/src/Authentication/RequestConditional.php',
+    'Http\\Message\\Authentication\\Wsse' => $vendorDir . '/php-http/message/src/Authentication/Wsse.php',
+    'Http\\Message\\Builder\\ResponseBuilder' => $vendorDir . '/php-http/message/src/Builder/ResponseBuilder.php',
+    'Http\\Message\\Cookie' => $vendorDir . '/php-http/message/src/Cookie.php',
+    'Http\\Message\\CookieJar' => $vendorDir . '/php-http/message/src/CookieJar.php',
+    'Http\\Message\\Decorator\\MessageDecorator' => $vendorDir . '/php-http/message/src/Decorator/MessageDecorator.php',
+    'Http\\Message\\Decorator\\RequestDecorator' => $vendorDir . '/php-http/message/src/Decorator/RequestDecorator.php',
+    'Http\\Message\\Decorator\\ResponseDecorator' => $vendorDir . '/php-http/message/src/Decorator/ResponseDecorator.php',
+    'Http\\Message\\Decorator\\StreamDecorator' => $vendorDir . '/php-http/message/src/Decorator/StreamDecorator.php',
+    'Http\\Message\\Encoding\\ChunkStream' => $vendorDir . '/php-http/message/src/Encoding/ChunkStream.php',
+    'Http\\Message\\Encoding\\CompressStream' => $vendorDir . '/php-http/message/src/Encoding/CompressStream.php',
+    'Http\\Message\\Encoding\\DechunkStream' => $vendorDir . '/php-http/message/src/Encoding/DechunkStream.php',
+    'Http\\Message\\Encoding\\DecompressStream' => $vendorDir . '/php-http/message/src/Encoding/DecompressStream.php',
+    'Http\\Message\\Encoding\\DeflateStream' => $vendorDir . '/php-http/message/src/Encoding/DeflateStream.php',
+    'Http\\Message\\Encoding\\Filter\\Chunk' => $vendorDir . '/php-http/message/src/Encoding/Filter/Chunk.php',
+    'Http\\Message\\Encoding\\FilteredStream' => $vendorDir . '/php-http/message/src/Encoding/FilteredStream.php',
+    'Http\\Message\\Encoding\\GzipDecodeStream' => $vendorDir . '/php-http/message/src/Encoding/GzipDecodeStream.php',
+    'Http\\Message\\Encoding\\GzipEncodeStream' => $vendorDir . '/php-http/message/src/Encoding/GzipEncodeStream.php',
+    'Http\\Message\\Encoding\\InflateStream' => $vendorDir . '/php-http/message/src/Encoding/InflateStream.php',
+    'Http\\Message\\Formatter' => $vendorDir . '/php-http/message/src/Formatter.php',
+    'Http\\Message\\Formatter\\CurlCommandFormatter' => $vendorDir . '/php-http/message/src/Formatter/CurlCommandFormatter.php',
+    'Http\\Message\\Formatter\\FullHttpMessageFormatter' => $vendorDir . '/php-http/message/src/Formatter/FullHttpMessageFormatter.php',
+    'Http\\Message\\Formatter\\SimpleFormatter' => $vendorDir . '/php-http/message/src/Formatter/SimpleFormatter.php',
+    'Http\\Message\\MessageFactory' => $vendorDir . '/php-http/message-factory/src/MessageFactory.php',
+    'Http\\Message\\MessageFactory\\DiactorosMessageFactory' => $vendorDir . '/php-http/message/src/MessageFactory/DiactorosMessageFactory.php',
+    'Http\\Message\\MessageFactory\\GuzzleMessageFactory' => $vendorDir . '/php-http/message/src/MessageFactory/GuzzleMessageFactory.php',
+    'Http\\Message\\MessageFactory\\SlimMessageFactory' => $vendorDir . '/php-http/message/src/MessageFactory/SlimMessageFactory.php',
+    'Http\\Message\\RequestFactory' => $vendorDir . '/php-http/message-factory/src/RequestFactory.php',
+    'Http\\Message\\RequestMatcher' => $vendorDir . '/php-http/message/src/RequestMatcher.php',
+    'Http\\Message\\RequestMatcher\\CallbackRequestMatcher' => $vendorDir . '/php-http/message/src/RequestMatcher/CallbackRequestMatcher.php',
+    'Http\\Message\\RequestMatcher\\RegexRequestMatcher' => $vendorDir . '/php-http/message/src/RequestMatcher/RegexRequestMatcher.php',
+    'Http\\Message\\RequestMatcher\\RequestMatcher' => $vendorDir . '/php-http/message/src/RequestMatcher/RequestMatcher.php',
+    'Http\\Message\\ResponseFactory' => $vendorDir . '/php-http/message-factory/src/ResponseFactory.php',
+    'Http\\Message\\StreamFactory' => $vendorDir . '/php-http/message-factory/src/StreamFactory.php',
+    'Http\\Message\\StreamFactory\\DiactorosStreamFactory' => $vendorDir . '/php-http/message/src/StreamFactory/DiactorosStreamFactory.php',
+    'Http\\Message\\StreamFactory\\GuzzleStreamFactory' => $vendorDir . '/php-http/message/src/StreamFactory/GuzzleStreamFactory.php',
+    'Http\\Message\\StreamFactory\\SlimStreamFactory' => $vendorDir . '/php-http/message/src/StreamFactory/SlimStreamFactory.php',
+    'Http\\Message\\Stream\\BufferedStream' => $vendorDir . '/php-http/message/src/Stream/BufferedStream.php',
+    'Http\\Message\\UriFactory' => $vendorDir . '/php-http/message-factory/src/UriFactory.php',
+    'Http\\Message\\UriFactory\\DiactorosUriFactory' => $vendorDir . '/php-http/message/src/UriFactory/DiactorosUriFactory.php',
+    'Http\\Message\\UriFactory\\GuzzleUriFactory' => $vendorDir . '/php-http/message/src/UriFactory/GuzzleUriFactory.php',
+    'Http\\Message\\UriFactory\\SlimUriFactory' => $vendorDir . '/php-http/message/src/UriFactory/SlimUriFactory.php',
+    'Http\\Promise\\FulfilledPromise' => $vendorDir . '/php-http/promise/src/FulfilledPromise.php',
+    'Http\\Promise\\Promise' => $vendorDir . '/php-http/promise/src/Promise.php',
+    'Http\\Promise\\RejectedPromise' => $vendorDir . '/php-http/promise/src/RejectedPromise.php',
+    'Kryptonit3\\CouchPotato\\CouchPotato' => $vendorDir . '/kryptonit3/couchpotato/src/CouchPotato.php',
+    'Kryptonit3\\CouchPotato\\Exceptions\\InvalidException' => $vendorDir . '/kryptonit3/couchpotato/src/Exceptions/InvalidException.php',
+    'Kryptonit3\\SickRage\\Exceptions\\InvalidException' => $vendorDir . '/kryptonit3/sickrage/src/Exceptions/InvalidException.php',
+    'Kryptonit3\\SickRage\\SickRage' => $vendorDir . '/kryptonit3/sickrage/src/SickRage.php',
+    'Kryptonit3\\Sonarr\\Exceptions\\InvalidException' => $vendorDir . '/kryptonit3/sonarr/src/Exceptions/InvalidException.php',
+    'Kryptonit3\\Sonarr\\Sonarr' => $vendorDir . '/kryptonit3/sonarr/src/Sonarr.php',
     'PHPMailer' => $vendorDir . '/phpmailer/phpmailer/class.phpmailer.php',
     'PHPMailerOAuth' => $vendorDir . '/phpmailer/phpmailer/class.phpmaileroauth.php',
     'PHPMailerOAuthGoogle' => $vendorDir . '/phpmailer/phpmailer/class.phpmaileroauthgoogle.php',
     'POP3' => $vendorDir . '/phpmailer/phpmailer/class.pop3.php',
+    'Psr\\Http\\Message\\MessageInterface' => $vendorDir . '/psr/http-message/src/MessageInterface.php',
+    'Psr\\Http\\Message\\RequestInterface' => $vendorDir . '/psr/http-message/src/RequestInterface.php',
+    'Psr\\Http\\Message\\ResponseInterface' => $vendorDir . '/psr/http-message/src/ResponseInterface.php',
+    'Psr\\Http\\Message\\ServerRequestInterface' => $vendorDir . '/psr/http-message/src/ServerRequestInterface.php',
+    'Psr\\Http\\Message\\StreamInterface' => $vendorDir . '/psr/http-message/src/StreamInterface.php',
+    'Psr\\Http\\Message\\UploadedFileInterface' => $vendorDir . '/psr/http-message/src/UploadedFileInterface.php',
+    'Psr\\Http\\Message\\UriInterface' => $vendorDir . '/psr/http-message/src/UriInterface.php',
     'SMTP' => $vendorDir . '/phpmailer/phpmailer/class.smtp.php',
+    'SparkPost\\Resource' => $vendorDir . '/sparkpost/sparkpost/lib/SparkPost/Resource.php',
+    'SparkPost\\ResourceBase' => $vendorDir . '/sparkpost/sparkpost/lib/SparkPost/ResourceBase.php',
+    'SparkPost\\SparkPost' => $vendorDir . '/sparkpost/sparkpost/lib/SparkPost/SparkPost.php',
+    'SparkPost\\SparkPostException' => $vendorDir . '/sparkpost/sparkpost/lib/SparkPost/SparkPostException.php',
+    'SparkPost\\SparkPostPromise' => $vendorDir . '/sparkpost/sparkpost/lib/SparkPost/SparkPostPromise.php',
+    'SparkPost\\SparkPostResponse' => $vendorDir . '/sparkpost/sparkpost/lib/SparkPost/SparkPostResponse.php',
+    'SparkPost\\Transmission' => $vendorDir . '/sparkpost/sparkpost/lib/SparkPost/Transmission.php',
     'ntlm_sasl_client_class' => $vendorDir . '/phpmailer/phpmailer/extras/ntlm_sasl_client.php',
     'phpmailerException' => $vendorDir . '/phpmailer/phpmailer/class.phpmailer.php',
 );

+ 169 - 0
vendor/composer/autoload_static.php

@@ -110,12 +110,181 @@ class ComposerStaticInitbe7ec48d1178705ed9a8e33459c0af96
     );
 
     public static $classMap = array (
+        'Clue\\StreamFilter\\CallbackFilter' => __DIR__ . '/..' . '/clue/stream-filter/src/CallbackFilter.php',
         'EasyPeasyICS' => __DIR__ . '/..' . '/phpmailer/phpmailer/extras/EasyPeasyICS.php',
+        'GuzzleHttp\\Client' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Client.php',
+        'GuzzleHttp\\ClientInterface' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/ClientInterface.php',
+        'GuzzleHttp\\Cookie\\CookieJar' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Cookie/CookieJar.php',
+        'GuzzleHttp\\Cookie\\CookieJarInterface' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php',
+        'GuzzleHttp\\Cookie\\FileCookieJar' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php',
+        'GuzzleHttp\\Cookie\\SessionCookieJar' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php',
+        'GuzzleHttp\\Cookie\\SetCookie' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Cookie/SetCookie.php',
+        'GuzzleHttp\\Exception\\BadResponseException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/BadResponseException.php',
+        'GuzzleHttp\\Exception\\ClientException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/ClientException.php',
+        'GuzzleHttp\\Exception\\ConnectException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/ConnectException.php',
+        'GuzzleHttp\\Exception\\GuzzleException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/GuzzleException.php',
+        'GuzzleHttp\\Exception\\RequestException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/RequestException.php',
+        'GuzzleHttp\\Exception\\SeekException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/SeekException.php',
+        'GuzzleHttp\\Exception\\ServerException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/ServerException.php',
+        'GuzzleHttp\\Exception\\TooManyRedirectsException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php',
+        'GuzzleHttp\\Exception\\TransferException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/TransferException.php',
+        'GuzzleHttp\\HandlerStack' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/HandlerStack.php',
+        'GuzzleHttp\\Handler\\CurlFactory' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/CurlFactory.php',
+        'GuzzleHttp\\Handler\\CurlFactoryInterface' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php',
+        'GuzzleHttp\\Handler\\CurlHandler' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/CurlHandler.php',
+        'GuzzleHttp\\Handler\\CurlMultiHandler' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php',
+        'GuzzleHttp\\Handler\\EasyHandle' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/EasyHandle.php',
+        'GuzzleHttp\\Handler\\MockHandler' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/MockHandler.php',
+        'GuzzleHttp\\Handler\\Proxy' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/Proxy.php',
+        'GuzzleHttp\\Handler\\StreamHandler' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/StreamHandler.php',
+        'GuzzleHttp\\MessageFormatter' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/MessageFormatter.php',
+        'GuzzleHttp\\Middleware' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Middleware.php',
+        'GuzzleHttp\\Pool' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Pool.php',
+        'GuzzleHttp\\PrepareBodyMiddleware' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php',
+        'GuzzleHttp\\Promise\\AggregateException' => __DIR__ . '/..' . '/guzzlehttp/promises/src/AggregateException.php',
+        'GuzzleHttp\\Promise\\CancellationException' => __DIR__ . '/..' . '/guzzlehttp/promises/src/CancellationException.php',
+        'GuzzleHttp\\Promise\\Coroutine' => __DIR__ . '/..' . '/guzzlehttp/promises/src/Coroutine.php',
+        'GuzzleHttp\\Promise\\EachPromise' => __DIR__ . '/..' . '/guzzlehttp/promises/src/EachPromise.php',
+        'GuzzleHttp\\Promise\\FulfilledPromise' => __DIR__ . '/..' . '/guzzlehttp/promises/src/FulfilledPromise.php',
+        'GuzzleHttp\\Promise\\Promise' => __DIR__ . '/..' . '/guzzlehttp/promises/src/Promise.php',
+        'GuzzleHttp\\Promise\\PromiseInterface' => __DIR__ . '/..' . '/guzzlehttp/promises/src/PromiseInterface.php',
+        'GuzzleHttp\\Promise\\PromisorInterface' => __DIR__ . '/..' . '/guzzlehttp/promises/src/PromisorInterface.php',
+        'GuzzleHttp\\Promise\\RejectedPromise' => __DIR__ . '/..' . '/guzzlehttp/promises/src/RejectedPromise.php',
+        'GuzzleHttp\\Promise\\RejectionException' => __DIR__ . '/..' . '/guzzlehttp/promises/src/RejectionException.php',
+        'GuzzleHttp\\Promise\\TaskQueue' => __DIR__ . '/..' . '/guzzlehttp/promises/src/TaskQueue.php',
+        'GuzzleHttp\\Promise\\TaskQueueInterface' => __DIR__ . '/..' . '/guzzlehttp/promises/src/TaskQueueInterface.php',
+        'GuzzleHttp\\Psr7\\AppendStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/AppendStream.php',
+        'GuzzleHttp\\Psr7\\BufferStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/BufferStream.php',
+        'GuzzleHttp\\Psr7\\CachingStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/CachingStream.php',
+        'GuzzleHttp\\Psr7\\DroppingStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/DroppingStream.php',
+        'GuzzleHttp\\Psr7\\FnStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/FnStream.php',
+        'GuzzleHttp\\Psr7\\InflateStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/InflateStream.php',
+        'GuzzleHttp\\Psr7\\LazyOpenStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/LazyOpenStream.php',
+        'GuzzleHttp\\Psr7\\LimitStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/LimitStream.php',
+        'GuzzleHttp\\Psr7\\MessageTrait' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/MessageTrait.php',
+        'GuzzleHttp\\Psr7\\MultipartStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/MultipartStream.php',
+        'GuzzleHttp\\Psr7\\NoSeekStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/NoSeekStream.php',
+        'GuzzleHttp\\Psr7\\PumpStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/PumpStream.php',
+        'GuzzleHttp\\Psr7\\Request' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Request.php',
+        'GuzzleHttp\\Psr7\\Response' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Response.php',
+        'GuzzleHttp\\Psr7\\ServerRequest' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/ServerRequest.php',
+        'GuzzleHttp\\Psr7\\Stream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Stream.php',
+        'GuzzleHttp\\Psr7\\StreamDecoratorTrait' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/StreamDecoratorTrait.php',
+        'GuzzleHttp\\Psr7\\StreamWrapper' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/StreamWrapper.php',
+        'GuzzleHttp\\Psr7\\UploadedFile' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/UploadedFile.php',
+        'GuzzleHttp\\Psr7\\Uri' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Uri.php',
+        'GuzzleHttp\\Psr7\\UriNormalizer' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/UriNormalizer.php',
+        'GuzzleHttp\\Psr7\\UriResolver' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/UriResolver.php',
+        'GuzzleHttp\\RedirectMiddleware' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/RedirectMiddleware.php',
+        'GuzzleHttp\\RequestOptions' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/RequestOptions.php',
+        'GuzzleHttp\\RetryMiddleware' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/RetryMiddleware.php',
+        'GuzzleHttp\\TransferStats' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/TransferStats.php',
+        'GuzzleHttp\\UriTemplate' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/UriTemplate.php',
+        'Http\\Adapter\\Guzzle6\\Client' => __DIR__ . '/..' . '/php-http/guzzle6-adapter/src/Client.php',
+        'Http\\Adapter\\Guzzle6\\Promise' => __DIR__ . '/..' . '/php-http/guzzle6-adapter/src/Promise.php',
+        'Http\\Client\\Exception' => __DIR__ . '/..' . '/php-http/httplug/src/Exception.php',
+        'Http\\Client\\Exception\\HttpException' => __DIR__ . '/..' . '/php-http/httplug/src/Exception/HttpException.php',
+        'Http\\Client\\Exception\\NetworkException' => __DIR__ . '/..' . '/php-http/httplug/src/Exception/NetworkException.php',
+        'Http\\Client\\Exception\\RequestException' => __DIR__ . '/..' . '/php-http/httplug/src/Exception/RequestException.php',
+        'Http\\Client\\Exception\\TransferException' => __DIR__ . '/..' . '/php-http/httplug/src/Exception/TransferException.php',
+        'Http\\Client\\HttpAsyncClient' => __DIR__ . '/..' . '/php-http/httplug/src/HttpAsyncClient.php',
+        'Http\\Client\\HttpClient' => __DIR__ . '/..' . '/php-http/httplug/src/HttpClient.php',
+        'Http\\Client\\Promise\\HttpFulfilledPromise' => __DIR__ . '/..' . '/php-http/httplug/src/Promise/HttpFulfilledPromise.php',
+        'Http\\Client\\Promise\\HttpRejectedPromise' => __DIR__ . '/..' . '/php-http/httplug/src/Promise/HttpRejectedPromise.php',
+        'Http\\Discovery\\ClassDiscovery' => __DIR__ . '/..' . '/php-http/discovery/src/ClassDiscovery.php',
+        'Http\\Discovery\\Exception' => __DIR__ . '/..' . '/php-http/discovery/src/Exception.php',
+        'Http\\Discovery\\Exception\\ClassInstantiationFailedException' => __DIR__ . '/..' . '/php-http/discovery/src/Exception/ClassInstantiationFailedException.php',
+        'Http\\Discovery\\Exception\\DiscoveryFailedException' => __DIR__ . '/..' . '/php-http/discovery/src/Exception/DiscoveryFailedException.php',
+        'Http\\Discovery\\Exception\\NotFoundException' => __DIR__ . '/..' . '/php-http/discovery/src/Exception/NotFoundException.php',
+        'Http\\Discovery\\Exception\\PuliUnavailableException' => __DIR__ . '/..' . '/php-http/discovery/src/Exception/PuliUnavailableException.php',
+        'Http\\Discovery\\Exception\\StrategyUnavailableException' => __DIR__ . '/..' . '/php-http/discovery/src/Exception/StrategyUnavailableException.php',
+        'Http\\Discovery\\HttpAsyncClientDiscovery' => __DIR__ . '/..' . '/php-http/discovery/src/HttpAsyncClientDiscovery.php',
+        'Http\\Discovery\\HttpClientDiscovery' => __DIR__ . '/..' . '/php-http/discovery/src/HttpClientDiscovery.php',
+        'Http\\Discovery\\MessageFactoryDiscovery' => __DIR__ . '/..' . '/php-http/discovery/src/MessageFactoryDiscovery.php',
+        'Http\\Discovery\\NotFoundException' => __DIR__ . '/..' . '/php-http/discovery/src/NotFoundException.php',
+        'Http\\Discovery\\Strategy\\CommonClassesStrategy' => __DIR__ . '/..' . '/php-http/discovery/src/Strategy/CommonClassesStrategy.php',
+        'Http\\Discovery\\Strategy\\DiscoveryStrategy' => __DIR__ . '/..' . '/php-http/discovery/src/Strategy/DiscoveryStrategy.php',
+        'Http\\Discovery\\Strategy\\MockClientStrategy' => __DIR__ . '/..' . '/php-http/discovery/src/Strategy/MockClientStrategy.php',
+        'Http\\Discovery\\Strategy\\PuliBetaStrategy' => __DIR__ . '/..' . '/php-http/discovery/src/Strategy/PuliBetaStrategy.php',
+        'Http\\Discovery\\StreamFactoryDiscovery' => __DIR__ . '/..' . '/php-http/discovery/src/StreamFactoryDiscovery.php',
+        'Http\\Discovery\\UriFactoryDiscovery' => __DIR__ . '/..' . '/php-http/discovery/src/UriFactoryDiscovery.php',
+        'Http\\Message\\Authentication' => __DIR__ . '/..' . '/php-http/message/src/Authentication.php',
+        'Http\\Message\\Authentication\\AutoBasicAuth' => __DIR__ . '/..' . '/php-http/message/src/Authentication/AutoBasicAuth.php',
+        'Http\\Message\\Authentication\\BasicAuth' => __DIR__ . '/..' . '/php-http/message/src/Authentication/BasicAuth.php',
+        'Http\\Message\\Authentication\\Bearer' => __DIR__ . '/..' . '/php-http/message/src/Authentication/Bearer.php',
+        'Http\\Message\\Authentication\\Chain' => __DIR__ . '/..' . '/php-http/message/src/Authentication/Chain.php',
+        'Http\\Message\\Authentication\\Matching' => __DIR__ . '/..' . '/php-http/message/src/Authentication/Matching.php',
+        'Http\\Message\\Authentication\\QueryParam' => __DIR__ . '/..' . '/php-http/message/src/Authentication/QueryParam.php',
+        'Http\\Message\\Authentication\\RequestConditional' => __DIR__ . '/..' . '/php-http/message/src/Authentication/RequestConditional.php',
+        'Http\\Message\\Authentication\\Wsse' => __DIR__ . '/..' . '/php-http/message/src/Authentication/Wsse.php',
+        'Http\\Message\\Builder\\ResponseBuilder' => __DIR__ . '/..' . '/php-http/message/src/Builder/ResponseBuilder.php',
+        'Http\\Message\\Cookie' => __DIR__ . '/..' . '/php-http/message/src/Cookie.php',
+        'Http\\Message\\CookieJar' => __DIR__ . '/..' . '/php-http/message/src/CookieJar.php',
+        'Http\\Message\\Decorator\\MessageDecorator' => __DIR__ . '/..' . '/php-http/message/src/Decorator/MessageDecorator.php',
+        'Http\\Message\\Decorator\\RequestDecorator' => __DIR__ . '/..' . '/php-http/message/src/Decorator/RequestDecorator.php',
+        'Http\\Message\\Decorator\\ResponseDecorator' => __DIR__ . '/..' . '/php-http/message/src/Decorator/ResponseDecorator.php',
+        'Http\\Message\\Decorator\\StreamDecorator' => __DIR__ . '/..' . '/php-http/message/src/Decorator/StreamDecorator.php',
+        'Http\\Message\\Encoding\\ChunkStream' => __DIR__ . '/..' . '/php-http/message/src/Encoding/ChunkStream.php',
+        'Http\\Message\\Encoding\\CompressStream' => __DIR__ . '/..' . '/php-http/message/src/Encoding/CompressStream.php',
+        'Http\\Message\\Encoding\\DechunkStream' => __DIR__ . '/..' . '/php-http/message/src/Encoding/DechunkStream.php',
+        'Http\\Message\\Encoding\\DecompressStream' => __DIR__ . '/..' . '/php-http/message/src/Encoding/DecompressStream.php',
+        'Http\\Message\\Encoding\\DeflateStream' => __DIR__ . '/..' . '/php-http/message/src/Encoding/DeflateStream.php',
+        'Http\\Message\\Encoding\\Filter\\Chunk' => __DIR__ . '/..' . '/php-http/message/src/Encoding/Filter/Chunk.php',
+        'Http\\Message\\Encoding\\FilteredStream' => __DIR__ . '/..' . '/php-http/message/src/Encoding/FilteredStream.php',
+        'Http\\Message\\Encoding\\GzipDecodeStream' => __DIR__ . '/..' . '/php-http/message/src/Encoding/GzipDecodeStream.php',
+        'Http\\Message\\Encoding\\GzipEncodeStream' => __DIR__ . '/..' . '/php-http/message/src/Encoding/GzipEncodeStream.php',
+        'Http\\Message\\Encoding\\InflateStream' => __DIR__ . '/..' . '/php-http/message/src/Encoding/InflateStream.php',
+        'Http\\Message\\Formatter' => __DIR__ . '/..' . '/php-http/message/src/Formatter.php',
+        'Http\\Message\\Formatter\\CurlCommandFormatter' => __DIR__ . '/..' . '/php-http/message/src/Formatter/CurlCommandFormatter.php',
+        'Http\\Message\\Formatter\\FullHttpMessageFormatter' => __DIR__ . '/..' . '/php-http/message/src/Formatter/FullHttpMessageFormatter.php',
+        'Http\\Message\\Formatter\\SimpleFormatter' => __DIR__ . '/..' . '/php-http/message/src/Formatter/SimpleFormatter.php',
+        'Http\\Message\\MessageFactory' => __DIR__ . '/..' . '/php-http/message-factory/src/MessageFactory.php',
+        'Http\\Message\\MessageFactory\\DiactorosMessageFactory' => __DIR__ . '/..' . '/php-http/message/src/MessageFactory/DiactorosMessageFactory.php',
+        'Http\\Message\\MessageFactory\\GuzzleMessageFactory' => __DIR__ . '/..' . '/php-http/message/src/MessageFactory/GuzzleMessageFactory.php',
+        'Http\\Message\\MessageFactory\\SlimMessageFactory' => __DIR__ . '/..' . '/php-http/message/src/MessageFactory/SlimMessageFactory.php',
+        'Http\\Message\\RequestFactory' => __DIR__ . '/..' . '/php-http/message-factory/src/RequestFactory.php',
+        'Http\\Message\\RequestMatcher' => __DIR__ . '/..' . '/php-http/message/src/RequestMatcher.php',
+        'Http\\Message\\RequestMatcher\\CallbackRequestMatcher' => __DIR__ . '/..' . '/php-http/message/src/RequestMatcher/CallbackRequestMatcher.php',
+        'Http\\Message\\RequestMatcher\\RegexRequestMatcher' => __DIR__ . '/..' . '/php-http/message/src/RequestMatcher/RegexRequestMatcher.php',
+        'Http\\Message\\RequestMatcher\\RequestMatcher' => __DIR__ . '/..' . '/php-http/message/src/RequestMatcher/RequestMatcher.php',
+        'Http\\Message\\ResponseFactory' => __DIR__ . '/..' . '/php-http/message-factory/src/ResponseFactory.php',
+        'Http\\Message\\StreamFactory' => __DIR__ . '/..' . '/php-http/message-factory/src/StreamFactory.php',
+        'Http\\Message\\StreamFactory\\DiactorosStreamFactory' => __DIR__ . '/..' . '/php-http/message/src/StreamFactory/DiactorosStreamFactory.php',
+        'Http\\Message\\StreamFactory\\GuzzleStreamFactory' => __DIR__ . '/..' . '/php-http/message/src/StreamFactory/GuzzleStreamFactory.php',
+        'Http\\Message\\StreamFactory\\SlimStreamFactory' => __DIR__ . '/..' . '/php-http/message/src/StreamFactory/SlimStreamFactory.php',
+        'Http\\Message\\Stream\\BufferedStream' => __DIR__ . '/..' . '/php-http/message/src/Stream/BufferedStream.php',
+        'Http\\Message\\UriFactory' => __DIR__ . '/..' . '/php-http/message-factory/src/UriFactory.php',
+        'Http\\Message\\UriFactory\\DiactorosUriFactory' => __DIR__ . '/..' . '/php-http/message/src/UriFactory/DiactorosUriFactory.php',
+        'Http\\Message\\UriFactory\\GuzzleUriFactory' => __DIR__ . '/..' . '/php-http/message/src/UriFactory/GuzzleUriFactory.php',
+        'Http\\Message\\UriFactory\\SlimUriFactory' => __DIR__ . '/..' . '/php-http/message/src/UriFactory/SlimUriFactory.php',
+        'Http\\Promise\\FulfilledPromise' => __DIR__ . '/..' . '/php-http/promise/src/FulfilledPromise.php',
+        'Http\\Promise\\Promise' => __DIR__ . '/..' . '/php-http/promise/src/Promise.php',
+        'Http\\Promise\\RejectedPromise' => __DIR__ . '/..' . '/php-http/promise/src/RejectedPromise.php',
+        'Kryptonit3\\CouchPotato\\CouchPotato' => __DIR__ . '/..' . '/kryptonit3/couchpotato/src/CouchPotato.php',
+        'Kryptonit3\\CouchPotato\\Exceptions\\InvalidException' => __DIR__ . '/..' . '/kryptonit3/couchpotato/src/Exceptions/InvalidException.php',
+        'Kryptonit3\\SickRage\\Exceptions\\InvalidException' => __DIR__ . '/..' . '/kryptonit3/sickrage/src/Exceptions/InvalidException.php',
+        'Kryptonit3\\SickRage\\SickRage' => __DIR__ . '/..' . '/kryptonit3/sickrage/src/SickRage.php',
+        'Kryptonit3\\Sonarr\\Exceptions\\InvalidException' => __DIR__ . '/..' . '/kryptonit3/sonarr/src/Exceptions/InvalidException.php',
+        'Kryptonit3\\Sonarr\\Sonarr' => __DIR__ . '/..' . '/kryptonit3/sonarr/src/Sonarr.php',
         'PHPMailer' => __DIR__ . '/..' . '/phpmailer/phpmailer/class.phpmailer.php',
         'PHPMailerOAuth' => __DIR__ . '/..' . '/phpmailer/phpmailer/class.phpmaileroauth.php',
         'PHPMailerOAuthGoogle' => __DIR__ . '/..' . '/phpmailer/phpmailer/class.phpmaileroauthgoogle.php',
         'POP3' => __DIR__ . '/..' . '/phpmailer/phpmailer/class.pop3.php',
+        'Psr\\Http\\Message\\MessageInterface' => __DIR__ . '/..' . '/psr/http-message/src/MessageInterface.php',
+        'Psr\\Http\\Message\\RequestInterface' => __DIR__ . '/..' . '/psr/http-message/src/RequestInterface.php',
+        'Psr\\Http\\Message\\ResponseInterface' => __DIR__ . '/..' . '/psr/http-message/src/ResponseInterface.php',
+        'Psr\\Http\\Message\\ServerRequestInterface' => __DIR__ . '/..' . '/psr/http-message/src/ServerRequestInterface.php',
+        'Psr\\Http\\Message\\StreamInterface' => __DIR__ . '/..' . '/psr/http-message/src/StreamInterface.php',
+        'Psr\\Http\\Message\\UploadedFileInterface' => __DIR__ . '/..' . '/psr/http-message/src/UploadedFileInterface.php',
+        'Psr\\Http\\Message\\UriInterface' => __DIR__ . '/..' . '/psr/http-message/src/UriInterface.php',
         'SMTP' => __DIR__ . '/..' . '/phpmailer/phpmailer/class.smtp.php',
+        'SparkPost\\Resource' => __DIR__ . '/..' . '/sparkpost/sparkpost/lib/SparkPost/Resource.php',
+        'SparkPost\\ResourceBase' => __DIR__ . '/..' . '/sparkpost/sparkpost/lib/SparkPost/ResourceBase.php',
+        'SparkPost\\SparkPost' => __DIR__ . '/..' . '/sparkpost/sparkpost/lib/SparkPost/SparkPost.php',
+        'SparkPost\\SparkPostException' => __DIR__ . '/..' . '/sparkpost/sparkpost/lib/SparkPost/SparkPostException.php',
+        'SparkPost\\SparkPostPromise' => __DIR__ . '/..' . '/sparkpost/sparkpost/lib/SparkPost/SparkPostPromise.php',
+        'SparkPost\\SparkPostResponse' => __DIR__ . '/..' . '/sparkpost/sparkpost/lib/SparkPost/SparkPostResponse.php',
+        'SparkPost\\Transmission' => __DIR__ . '/..' . '/sparkpost/sparkpost/lib/SparkPost/Transmission.php',
         'ntlm_sasl_client_class' => __DIR__ . '/..' . '/phpmailer/phpmailer/extras/ntlm_sasl_client.php',
         'phpmailerException' => __DIR__ . '/..' . '/phpmailer/phpmailer/class.phpmailer.php',
     );

Некоторые файлы не были показаны из-за большого количества измененных файлов