homepage.php 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543
  1. <?php
  2. $data = false;
  3. ini_set("display_errors", 1);
  4. ini_set("error_reporting", E_ALL | E_STRICT);
  5. require_once("user.php");
  6. require_once("translate.php");
  7. require_once("functions.php");
  8. $USER = new User("registration_callback");
  9. $dbfile = DATABASE_LOCATION . constant('User::DATABASE_NAME') . ".db";
  10. $file_db = new PDO("sqlite:" . $dbfile);
  11. $file_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  12. $dbOptions = $file_db->query('SELECT name FROM sqlite_master WHERE type="table" AND name="options"');
  13. $hasOptions = "No";
  14. foreach($dbOptions as $row) :
  15. if (in_array("options", $row)) :
  16. $hasOptions = "Yes";
  17. endif;
  18. endforeach;
  19. if($hasOptions == "No") :
  20. $title = "Organizr";
  21. $topbar = "#333333";
  22. $topbartext = "#66D9EF";
  23. $bottombar = "#333333";
  24. $sidebar = "#393939";
  25. $hoverbg = "#AD80FD";
  26. $activetabBG = "#F92671";
  27. $activetabicon = "#FFFFFF";
  28. $activetabtext = "#FFFFFF";
  29. $inactiveicon = "#66D9EF";
  30. $inactivetext = "#66D9EF";
  31. $loading = "#66D9EF";
  32. $hovertext = "#000000";
  33. endif;
  34. if($hasOptions == "Yes") :
  35. $resulto = $file_db->query('SELECT * FROM options');
  36. foreach($resulto as $row) :
  37. $title = isset($row['title']) ? $row['title'] : "Organizr";
  38. $topbartext = isset($row['topbartext']) ? $row['topbartext'] : "#66D9EF";
  39. $topbar = isset($row['topbar']) ? $row['topbar'] : "#333333";
  40. $bottombar = isset($row['bottombar']) ? $row['bottombar'] : "#333333";
  41. $sidebar = isset($row['sidebar']) ? $row['sidebar'] : "#393939";
  42. $hoverbg = isset($row['hoverbg']) ? $row['hoverbg'] : "#AD80FD";
  43. $activetabBG = isset($row['activetabBG']) ? $row['activetabBG'] : "#F92671";
  44. $activetabicon = isset($row['activetabicon']) ? $row['activetabicon'] : "#FFFFFF";
  45. $activetabtext = isset($row['activetabtext']) ? $row['activetabtext'] : "#FFFFFF";
  46. $inactiveicon = isset($row['inactiveicon']) ? $row['inactiveicon'] : "#66D9EF";
  47. $inactivetext = isset($row['inactivetext']) ? $row['inactivetext'] : "#66D9EF";
  48. $loading = isset($row['loading']) ? $row['loading'] : "#66D9EF";
  49. $hovertext = isset($row['hovertext']) ? $row['hovertext'] : "#000000";
  50. endforeach;
  51. endif;
  52. ?>
  53. <!DOCTYPE html>
  54. <html lang="en" class="no-js">
  55. <head>
  56. <meta charset="UTF-8">
  57. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  58. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  59. <meta name="msapplication-tap-highlight" content="no" />
  60. <title><?=$title;?> Homepage</title>
  61. <link rel="stylesheet" href="bower_components/bootstrap/dist/css/bootstrap.min.css">
  62. <link rel="stylesheet" href="bower_components/font-awesome/css/font-awesome.min.css">
  63. <link rel="stylesheet" href="bower_components/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.css">
  64. <script src="js/menu/modernizr.custom.js"></script>
  65. <link rel="stylesheet" href="bower_components/animate.css/animate.min.css">
  66. <link rel="stylesheet" href="bower_components/fullcalendar/dist/fullcalendar.css">
  67. <link rel="stylesheet" href="css/style.css">
  68. <!--[if lt IE 9]>
  69. <script src="bower_components/html5shiv/dist/html5shiv.min.js"></script>
  70. <script src="bower_components/respondJs/dest/respond.min.js"></script>
  71. <![endif]-->
  72. <style>
  73. table.fc-list-table {
  74. table-layout: auto;
  75. }.tabbable{
  76. margin-bottom: 0;
  77. }.fc-day-grid-event .fc-content {
  78. white-space: normal;
  79. }.fc-list-item {
  80. table-layout: auto;
  81. position: inherit;
  82. margin: 10px;
  83. border-radius: 4px;
  84. padding: 0 5px 0 5px;
  85. color: #fff !important;
  86. }.fc-calendar .fc-toolbar {
  87. background: <?=$topbar;?>;
  88. color: <?=$topbartext;?>;
  89. border-radius: 5px 5px 0 0;
  90. padding: 15px;
  91. }.fc-calendar .fc-toolbar .fc-right {
  92. bottom: 0px;
  93. right: 20px;
  94. }.fc-calendar .fc-toolbar .fc-right button {
  95. color: <?=$topbartext;?>;
  96. }.fc-calendar .fc-toolbar .fc-prev-button, .fc-calendar .fc-toolbar .fc-next-button {
  97. color: <?=$topbartext;?>;
  98. }.carousel-image{
  99. width: 100px !important;
  100. height: 150px !important;
  101. border-radius: 3px 0 0 3px;
  102. }.carousel-image.album{
  103. width: 150px !important;
  104. height: 150px !important;
  105. border-radius: 3px 0 0 3px;
  106. }.carousel-control.album {
  107. top: 5px !important;
  108. width: 4% !important;
  109. }.carousel-control {
  110. top: 5px !important;
  111. width: 4% !important;
  112. }.carousel-caption.album {
  113. position: absolute;
  114. right: 4%;
  115. top: 0px;
  116. left: 160px;
  117. z-index: 10;
  118. bottom: 0px;
  119. padding-top: 0px;
  120. color: #fff;
  121. text-align: left;
  122. }.carousel-caption {
  123. position: absolute;
  124. right: 4%;
  125. top: 0px;
  126. left: 110px;
  127. z-index: 10;
  128. bottom: 0px;
  129. padding-top: 0px;
  130. color: #fff;
  131. text-align: left;
  132. padding-bottom: 2px !important;
  133. overflow: hidden !important;
  134. }<?php if(CUSTOMCSS == "true") :
  135. $template_file = "custom.css";
  136. $file_handle = fopen($template_file, "rb");
  137. echo fread($file_handle, filesize($template_file));
  138. fclose($file_handle);
  139. echo "\n";
  140. endif; ?>
  141. </style>
  142. </head>
  143. <body class="scroller-body" style="padding: 0px;">
  144. <div class="main-wrapper" style="position: initial;">
  145. <div id="content" class="container-fluid">
  146. <br/>
  147. <?php if(NZBGETURL != "" || SABNZBDURL != "") : ?>
  148. <div id="downloadClientRow" class="row">
  149. <div class="col-xs-12 col-md-12">
  150. <div class="content-box">
  151. <div class="tabbable panel with-nav-tabs panel-default">
  152. <div class="panel-heading">
  153. <div class="content-tools i-block pull-right">
  154. <a id="getDownloader" class="repeat-btn">
  155. <i class="fa fa-repeat"></i>
  156. </a>
  157. <a class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
  158. <i class="fa fa-chevron-down"></i>
  159. </a>
  160. <ul id="downloaderSeconds" class="dropdown-menu" style="top: 32px !important">
  161. <li data-value="5000"><a>Refresh every 5 seconds</a></li>
  162. <li data-value="10000"><a>Refresh every 10 seconds</a></li>
  163. <li data-value="30000"><a>Refresh every 30 seconds</a></li>
  164. <li data-value="60000"><a>Refresh every 60 seconds</a></li>
  165. </ul>
  166. </div>
  167. <h3 class="pull-left"><?php if(NZBGETURL != ""){ echo "NZBGet "; } if(SABNZBDURL != ""){ echo "SABnzbd "; } ?></h3>
  168. <ul class="nav nav-tabs pull-right">
  169. <li class="active"><a href="#downloadQueue" data-toggle="tab" aria-expanded="true"><?php echo $language->translate("QUEUE");?></a></li>
  170. <li class=""><a href="#downloadHistory" data-toggle="tab" aria-expanded="false"><?php echo $language->translate("HISTORY");?></a></li>
  171. </ul>
  172. <div class="clearfix"></div>
  173. </div>
  174. <div class="panel-body">
  175. <div class="tab-content">
  176. <div class="tab-pane fade active in" id="downloadQueue">
  177. <div class="table-responsive" style="max-height: 300px">
  178. <table class="table table-striped progress-widget zero-m" style="max-height: 300px">
  179. <thead>
  180. <tr>
  181. <th><?php echo $language->translate("FILE");?></th>
  182. <th><?php echo $language->translate("STATUS");?></th>
  183. <th><?php echo $language->translate("CATEGORY");?></th>
  184. <th><?php echo $language->translate("PROGRESS");?></th>
  185. </tr>
  186. </thead>
  187. <tbody id="downloaderQueue">
  188. </tbody>
  189. </table>
  190. </div>
  191. </div>
  192. <div class="tab-pane fade" id="downloadHistory">
  193. <div class="table-responsive" style="max-height: 300px">
  194. <table class="table table-striped progress-widget zero-m" style="max-height: 300px">
  195. <thead>
  196. <tr>
  197. <th>File</th>
  198. <th>Status</th>
  199. <th>Category</th>
  200. <th>Progress</th>
  201. </tr>
  202. </thead>
  203. <tbody id="downloaderHistory">
  204. </tbody>
  205. </table>
  206. </div>
  207. </div>
  208. </div>
  209. </div>
  210. </div>
  211. </div>
  212. </div>
  213. </div>
  214. <?php endif; ?>
  215. <div id="plexRow" class="row">
  216. <?php
  217. $plexSize = 0;
  218. if(PLEXRECENTMOVIE == "true"){ $plexSize++; }
  219. if(PLEXRECENTTV == "true"){ $plexSize++; }
  220. if(PLEXRECENTMUSIC == "true"){ $plexSize++; }
  221. if(PLEXPLAYINGNOW == "true"){ $plexSize++; }
  222. if($plexSize >= 4){ $plexSize = 3; }elseif($plexSize == 3){ $plexSize = 4; }elseif($plexSize == 2){ $plexSize = 6; }elseif($plexSize == 1){ $plexSize = 12; }
  223. if(PLEXRECENTMOVIE == "true"){ echo getPlexRecent(PLEXURL, PLEXPORT, "movie", PLEXTOKEN, $plexSize, $language->translate("MOVIES")); }
  224. if(PLEXRECENTTV == "true"){ echo getPlexRecent(PLEXURL, PLEXPORT, "season", PLEXTOKEN, $plexSize, $language->translate("TV_SHOWS")); }
  225. if(PLEXRECENTMUSIC == "true"){ echo getPlexRecent(PLEXURL, PLEXPORT, "album", PLEXTOKEN, $plexSize, $language->translate("MUSIC")); }
  226. if(PLEXPLAYINGNOW == "true"){ echo getPlexStreams(PLEXURL, PLEXPORT, PLEXTOKEN, $plexSize, $language->translate("PLAYING_NOW_ON_PLEX")); }
  227. ?>
  228. </div>
  229. <?php if(SONARRURL != "" || RADARRURL != "" || HEADPHONESURL != "") : ?>
  230. <div id="calendarLegendRow" class="row" style="padding: 0 0 10px 0;">
  231. <div class="col-lg-4">
  232. <span class="label label-primary well-sm">Available</span>
  233. <span class="label label-danger well-sm">Unavailable</span>
  234. <span class="label indigo-bg well-sm">Unreleased</span>
  235. </div>
  236. </div>
  237. <div id="calendarRow" class="row">
  238. <div class="col-lg-12">
  239. <div id="calendar" class="fc-calendar box-shadow fc fc-ltr fc-unthemed"></div>
  240. </div>
  241. </div>
  242. <?php endif; ?>
  243. </div>
  244. </div>
  245. <!--Scripts-->
  246. <script src="bower_components/jquery/dist/jquery.min.js"></script>
  247. <script src="bower_components/bootstrap/dist/js/bootstrap.min.js"></script>
  248. <script src="bower_components/moment/min/moment.min.js"></script>
  249. <script src="bower_components/jquery.nicescroll/jquery.nicescroll.min.js"></script>
  250. <script src="bower_components/slimScroll/jquery.slimscroll.min.js"></script>
  251. <script src="bower_components/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.js"></script>
  252. <script src="bower_components/jquery.nicescroll/jquery.nicescroll.min.js"></script>
  253. <script src="bower_components/cta/dist/cta.min.js"></script>
  254. <script src="bower_components/fullcalendar/dist/fullcalendar.js"></script>
  255. <script src="js/jqueri_ui_custom/jquery-ui.min.js"></script>
  256. <script src="js/jquery.mousewheel.min.js" type="text/javascript"></script>
  257. <script>
  258. $( document ).ready(function() {
  259. $('.repeat-btn').click(function(){
  260. var refreshBox = $(this).closest('div.content-box');
  261. $("<div class='refresh-preloader'><div class='la-timer la-dark'><div></div></div></div>").appendTo(refreshBox).fadeIn(300);
  262. setTimeout(function(){
  263. var refreshPreloader = refreshBox.find('.refresh-preloader'),
  264. deletedRefreshBox = refreshPreloader.fadeOut(300, function(){
  265. refreshPreloader.remove();
  266. });
  267. },1500);
  268. });
  269. $("body").niceScroll({
  270. railpadding: {top:0,right:0,left:0,bottom:0},
  271. scrollspeed: 30,
  272. mousescrollstep: 60
  273. });
  274. $(".table-responsive").niceScroll({
  275. railpadding: {top:0,right:0,left:0,bottom:0},
  276. scrollspeed: 30,
  277. mousescrollstep: 60
  278. });
  279. /*$(".carousel-caption").niceScroll({
  280. railpadding: {top:0,right:0,left:0,bottom:0},
  281. scrollspeed: 30,
  282. mousescrollstep: 60
  283. });*/
  284. // check if browser support HTML5 local storage
  285. function localStorageSupport() {
  286. return (('localStorage' in window) && window['localStorage'] !== null)
  287. }
  288. <?php if(NZBGETURL != "" || SABNZBDURL != ""){ ?>
  289. var downloaderSeconds = localStorage.getItem("downloaderSeconds");
  290. var myInterval = undefined;
  291. $("ul").find("[data-value='" + downloaderSeconds + "']").addClass("active");
  292. if( downloaderSeconds === null ) {
  293. localStorage.setItem("downloaderSeconds",'60000');
  294. var downloaderSeconds = "60000";
  295. }
  296. $('#downloaderSeconds li').click(function() {
  297. $('#downloaderSeconds li').removeClass("active");
  298. $(this).addClass("active");
  299. var newDownloaderSeconds = $(this).attr('data-value');
  300. console.log('New Time is ' + newDownloaderSeconds + ' Old Time was ' + downloaderSeconds);
  301. if (localStorageSupport) {
  302. localStorage.setItem("downloaderSeconds",newDownloaderSeconds);
  303. }
  304. if(typeof myInterval != 'undefined'){ clearInterval(myInterval); }
  305. refreshDownloader(newDownloaderSeconds);
  306. });
  307. <?php } ?>
  308. <?php if(NZBGETURL != ""){ ?>
  309. $("#downloaderHistory").load("downloader.php?downloader=nzbget&list=history");
  310. $("#downloaderQueue").load("downloader.php?downloader=nzbget&list=listgroups");
  311. refreshDownloader = function(secs){
  312. myInterval = setInterval(function(){
  313. $("#downloaderHistory").load("downloader.php?downloader=nzbget&list=history");
  314. $("#downloaderQueue").load("downloader.php?downloader=nzbget&list=listgroups");
  315. }, secs);
  316. }
  317. refreshDownloader(downloaderSeconds);
  318. $("#getDownloader").click(function(){
  319. $("#downloaderHistory").load("downloader.php?downloader=nzbget&list=history");
  320. $("#downloaderQueue").load("downloader.php?downloader=nzbget&list=listgroups");
  321. console.log('completed');
  322. });
  323. <?php } ?>
  324. <?php if(SABNZBDURL != ""){ ?>
  325. $("#downloaderHistory").load("downloader.php?downloader=sabnzbd&list=history");
  326. $("#downloaderQueue").load("downloader.php?downloader=sabnzbd&list=queue");
  327. refreshDownloader = function(secs){
  328. myInterval = setInterval(function(){
  329. $("#downloaderHistory").load("downloader.php?downloader=sabnzbd&list=history");
  330. $("#downloaderQueue").load("downloader.php?downloader=sabnzbd&list=queue");
  331. }, secs);
  332. }
  333. refreshDownloader(downloaderSeconds);
  334. $("#getDownloader").click(function(){
  335. $("#downloaderHistory").load("downloader.php?downloader=sabnzbd&list=history");
  336. $("#downloaderQueue").load("downloader.php?downloader=sabnzbd&list=queue");
  337. console.log('completed');
  338. });
  339. <?php } ?>
  340. });
  341. </script>
  342. <?php if(SONARRURL != "" || RADARRURL != "" || HEADPHONESURL != "") : ?>
  343. <script>
  344. $(function () {
  345. var date = new Date();
  346. var d = date.getDate();
  347. var m = date.getMonth();
  348. var y = date.getFullYear();
  349. $('#calendar').fullCalendar({
  350. eventLimit: false,
  351. height: "auto",
  352. defaultView: 'basicWeek',
  353. header: {
  354. left: 'prev,next,',
  355. center: 'title',
  356. right: 'today, month, basicDay,basicWeek,'
  357. },
  358. views: {
  359. basicDay: { buttonText: '<?php echo $language->translate("DAY");?>', eventLimit: false },
  360. basicWeek: { buttonText: '<?php echo $language->translate("WEEK");?>', eventLimit: false },
  361. month: { buttonText: '<?php echo $language->translate("MONTH");?>', eventLimit: false },
  362. today: { buttonText: '<?php echo $language->translate("TODAY");?>' },
  363. },
  364. events: [
  365. <?php if(SONARRURL != ""){ echo getSonarrCalendar(SONARRURL, SONARRPORT, SONARRKEY); } ?>
  366. <?php if(RADARRURL != ""){ echo getRadarrCalendar(RADARRURL, RADARRPORT, RADARRKEY); } ?>
  367. <?php if(HEADPHONESURL != ""){ echo getHeadphonesCalendar(HEADPHONESURL, HEADPHONESPORT, HEADPHONESKEY, "getUpcoming"); echo getHeadphonesCalendar(HEADPHONESURL, HEADPHONESPORT, HEADPHONESKEY, "getWanted"); } ?>
  368. ],
  369. editable: false,
  370. droppable: false,
  371. });
  372. });
  373. </script>
  374. <?php endif; ?>
  375. </body>
  376. </html>