homepage.php 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808
  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("functions.php");
  7. use Kryptonit3\Sonarr\Sonarr;
  8. use Kryptonit3\SickRage\SickRage;
  9. $sonarr = new Sonarr(SONARRURL, SONARRKEY);
  10. $radarr = new Sonarr(RADARRURL, RADARRKEY);
  11. $sickrage = new SickRage(SICKRAGEURL, SICKRAGEKEY);
  12. $USER = new User("registration_callback");
  13. // Check if connection to homepage is allowed
  14. qualifyUser(HOMEPAGEAUTHNEEDED, true);
  15. // Load Colours/Appearance
  16. foreach(loadAppearance() as $key => $value) {
  17. $$key = $value;
  18. }
  19. $startDate = date('Y-m-d',strtotime("-".CALENDARSTARTDAY." days"));
  20. $endDate = date('Y-m-d',strtotime("+".CALENDARENDDAY." days"));
  21. ?>
  22. <!DOCTYPE html>
  23. <html lang="en" class="no-js">
  24. <head>
  25. <meta charset="UTF-8">
  26. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  27. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  28. <meta name="msapplication-tap-highlight" content="no" />
  29. <title><?=$title;?> Homepage</title>
  30. <link rel="stylesheet" href="bower_components/bootstrap/dist/css/bootstrap.min.css">
  31. <link rel="stylesheet" href="bower_components/font-awesome/css/font-awesome.min.css">
  32. <link rel="stylesheet" href="bower_components/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.css">
  33. <script src="js/menu/modernizr.custom.js"></script>
  34. <link rel="stylesheet" href="bower_components/animate.css/animate.min.css">
  35. <link rel="stylesheet" href="bower_components/fullcalendar/dist/fullcalendar.css">
  36. <link rel="stylesheet" href="css/style.css?v=<?php echo INSTALLEDVERSION; ?>">
  37. <link rel="stylesheet" href="bower_components/mdi/css/materialdesignicons.min.css?v=<?php echo INSTALLEDVERSION; ?>">
  38. <link rel="stylesheet" href="bower_components/google-material-color/dist/palette.css?v=<?php echo INSTALLEDVERSION; ?>">
  39. <link rel="stylesheet" type="text/css" href="bower_components/slick/slick.css?v=<?php echo INSTALLEDVERSION; ?>">
  40. <!-- Add the slick-theme.css if you want default styling -->
  41. <!--Scripts-->
  42. <script src="bower_components/jquery/dist/jquery.min.js"></script>
  43. <script src="bower_components/bootstrap/dist/js/bootstrap.min.js"></script>
  44. <script src="bower_components/moment/min/moment.min.js"></script>
  45. <script src="bower_components/jquery.nicescroll/jquery.nicescroll.min.js"></script>
  46. <script src="bower_components/slimScroll/jquery.slimscroll.min.js"></script>
  47. <script src="bower_components/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.js"></script>
  48. <script src="bower_components/jquery.nicescroll/jquery.nicescroll.min.js"></script>
  49. <script src="bower_components/cta/dist/cta.min.js"></script>
  50. <script src="bower_components/fullcalendar/dist/fullcalendar.js?v=<?php echo INSTALLEDVERSION; ?>"></script>
  51. <script src="bower_components/slick/slick.js?v=<?php echo INSTALLEDVERSION; ?>"></script>
  52. <script src="js/jqueri_ui_custom/jquery-ui.min.js"></script>
  53. <script src="js/jquery.mousewheel.min.js" type="text/javascript"></script>
  54. <!--Other-->
  55. <script src="js/ajax.js?v=<?php echo INSTALLEDVERSION; ?>"></script>
  56. <!--[if lt IE 9]>
  57. <script src="bower_components/html5shiv/dist/html5shiv.min.js"></script>
  58. <script src="bower_components/respondJs/dest/respond.min.js"></script>
  59. <![endif]-->
  60. <style>
  61. .recentItems {
  62. padding-top: 10px;
  63. margin: 5px 0;
  64. }
  65. .slick-image-tall{
  66. width: 125px;
  67. height: 180px;
  68. }
  69. .slick-image-short{
  70. width: 125px;
  71. height: 130px;
  72. margin-top: 50px;
  73. }
  74. .overlay{
  75. position: absolute;
  76. top: 0;
  77. left: 0;
  78. width: 100%;
  79. height: 100%;
  80. display: none;
  81. z-index: 0;
  82. opacity: .98;
  83. }
  84. sort {
  85. display: none;
  86. }
  87. table.fc-list-table {
  88. table-layout: auto;
  89. }.tabbable{
  90. margin-bottom: 0;
  91. }.fc-day-grid-event .fc-content {
  92. white-space: normal;
  93. }.fc-list-item {
  94. table-layout: auto;
  95. position: inherit;
  96. margin: 10px;
  97. border-radius: 4px;
  98. padding: 0 5px 0 5px;
  99. color: #fff !important;
  100. }.fc-calendar .fc-toolbar {
  101. background: <?=$topbar;?>;
  102. color: <?=$topbartext;?>;
  103. border-radius: 5px 5px 0 0;
  104. padding: 15px;
  105. }.fc-calendar .fc-toolbar .fc-right {
  106. bottom: 0px;
  107. right: 20px;
  108. }.fc-calendar .fc-toolbar .fc-right button {
  109. color: <?=$topbartext;?>;
  110. }.fc-calendar .fc-toolbar .fc-prev-button, .fc-calendar .fc-toolbar .fc-next-button {
  111. color: <?=$topbartext;?>;
  112. }.carousel-image{
  113. width: 100px !important;
  114. height: 150px !important;
  115. border-radius: 3px 0 0 3px;
  116. }.carousel-image.album{
  117. width: 150px !important;
  118. height: 150px !important;
  119. border-radius: 3px 0 0 3px;
  120. }.carousel-control.album {
  121. top: 5px !important;
  122. width: 4% !important;
  123. }.carousel-control {
  124. top: 5px !important;
  125. width: 4% !important;
  126. }.carousel-caption.album {
  127. position: absolute;
  128. right: 4%;
  129. top: 0px;
  130. left: 160px;
  131. z-index: 10;
  132. bottom: 0px;
  133. padding-top: 0px;
  134. color: #fff;
  135. text-align: left;
  136. }.carousel-caption {
  137. position: absolute;
  138. right: 4%;
  139. top: 0px;
  140. left: 110px;
  141. z-index: 10;
  142. bottom: 0px;
  143. padding-top: 0px;
  144. color: #fff;
  145. text-align: left;
  146. padding-bottom: 2px !important;
  147. overflow: hidden !important;
  148. } @media screen and (max-width: 576px) {
  149. .nzbtable {
  150. padding-left: 5px !important;
  151. padding-right: 2px !important;
  152. font-size: 10px !important;
  153. word-break: break-word !important;
  154. }
  155. .nzbtable-file-row {
  156. padding-left: 5px !important;
  157. padding-right: 2px !important;
  158. font-size: 10px !important;
  159. white-space: normal !important;
  160. word-break: break-all !important;
  161. width: 0% !important;
  162. }
  163. } .nzbtable-file-row {
  164. white-space: normal !important;
  165. word-break: break-all !important;
  166. width: 0% !important;
  167. }.nzbtable-row {
  168. white-space: normal !important;
  169. width: 0% !important;
  170. font-size: 12px; !important;
  171. }<?php customCSS(); ?>
  172. </style>
  173. </head>
  174. <body class="scroller-body" style="padding: 0px;">
  175. <div class="main-wrapper" style="position: initial;">
  176. <div id="content" class="container-fluid">
  177. <br/>
  178. <?php if (qualifyUser(HOMEPAGENOTICEAUTH) && HOMEPAGENOTICETITLE && HOMEPAGENOTICETYPE && HOMEPAGENOTICEMESSAGE && HOMEPAGENOTICELAYOUT) { echo buildHomepageNotice(HOMEPAGENOTICELAYOUT, HOMEPAGENOTICETYPE, HOMEPAGENOTICETITLE, HOMEPAGENOTICEMESSAGE); } ?>
  179. <?php if (qualifyUser(HOMEPAGECUSTOMHTML1AUTH) && HOMEPAGECUSTOMHTML1) { echo "<div>" . HOMEPAGECUSTOMHTML1 . "</div>"; } ?>
  180. <?php if(SPEEDTEST == "true"){ ?>
  181. <style type="text/css">
  182. .flash {
  183. animation: flash 0.6s linear infinite;
  184. }
  185. @keyframes flash {
  186. 0% { opacity: 0.6; }
  187. 50% { opacity: 1; }
  188. }
  189. </style>
  190. <script type="text/javascript">
  191. var w = null
  192. function runTest() {
  193. document.getElementById('startBtn').style.display = 'none'
  194. document.getElementById('testArea').style.display = ''
  195. document.getElementById('abortBtn').style.display = ''
  196. w = new Worker('bower_components/speed/speedtest_worker.min.js')
  197. var interval = setInterval(function () { w.postMessage('status') }, 100)
  198. w.onmessage = function (event) {
  199. var data = event.data.split(';')
  200. var status = Number(data[0])
  201. var dl = document.getElementById('download')
  202. var ul = document.getElementById('upload')
  203. var ping = document.getElementById('ping')
  204. var jitter = document.getElementById('jitter')
  205. dl.className = status === 1 ? 'w-name flash' : 'w-name'
  206. ping.className = status === 2 ? 'w-name flash' : 'w-name'
  207. jitter.className = ul.className = status === 3 ? 'w-name flash' : 'w-name'
  208. if (status >= 4) {
  209. clearInterval(interval)
  210. document.getElementById('abortBtn').style.display = 'none'
  211. document.getElementById('startBtn').style.display = ''
  212. w = null
  213. }
  214. if (status === 5) {
  215. document.getElementById('testArea').style.display = 'none'
  216. }
  217. dl.textContent = data[1] + " Mbit/s";
  218. $("#downloadpercent").attr("style", "width: " + data[1] + "%;");
  219. $("#uploadpercent").attr("style", "width: " + data[2] + "%;");
  220. $("#pingpercent").attr("style", "width: " + data[3] + "%;");
  221. $("#jitterpercent").attr("style", "width: " + data[5] + "%;");
  222. ul.textContent = data[2] + " Mbit/s";
  223. ping.textContent = data[3] + " ms";
  224. jitter.textContent = data[5] + " ms";
  225. }
  226. w.postMessage('start')
  227. }
  228. function abortTest() {
  229. if (w) w.postMessage('abort')
  230. }
  231. </script>
  232. <div class="row" id="testArea" style="display:none">
  233. <div class="test col-sm-3 col-lg-3">
  234. <div class="content-box ultra-widget green-bg" data-counter="">
  235. <div id="downloadpercent" class="progress-bar progress-bar-striped active w-used" style=""></div>
  236. <div class="w-content">
  237. <div class="w-icon right pull-right"><i class="mdi mdi-cloud-download"></i></div>
  238. <div class="w-descr left pull-left text-center">
  239. <span class="testName text-uppercase w-name">Download</span>
  240. <br>
  241. <span class="w-name counter" id="download" ></span>
  242. </div>
  243. </div>
  244. </div>
  245. </div>
  246. <div class="test col-sm-3 col-lg-3">
  247. <div class="content-box ultra-widget red-bg" data-counter="">
  248. <div id="uploadpercent" class="progress-bar progress-bar-striped active w-used" style=""></div>
  249. <div class="w-content">
  250. <div class="w-icon right pull-right"><i class="mdi mdi-cloud-upload"></i></div>
  251. <div class="w-descr left pull-left text-center">
  252. <span class="testName text-uppercase w-name">Upload</span>
  253. <br>
  254. <span class="w-name counter" id="upload" ></span>
  255. </div>
  256. </div>
  257. </div>
  258. </div>
  259. <div class="test col-sm-3 col-lg-3">
  260. <div class="content-box ultra-widget yellow-bg" data-counter="">
  261. <div id="pingpercent" class="progress-bar progress-bar-striped active w-used" style=""></div>
  262. <div class="w-content">
  263. <div class="w-icon right pull-right"><i class="mdi mdi-timer"></i></div>
  264. <div class="w-descr left pull-left text-center">
  265. <span class="testName text-uppercase w-name">Latency</span>
  266. <br>
  267. <span class="w-name counter" id="ping" ></span>
  268. </div>
  269. </div>
  270. </div>
  271. </div>
  272. <div class="test col-sm-3 col-lg-3">
  273. <div class="content-box ultra-widget blue-bg" data-counter="">
  274. <div id="jitterpercent" class="progress-bar progress-bar-striped active w-used" style=""></div>
  275. <div class="w-content">
  276. <div class="w-icon right pull-right"><i class="mdi mdi-pulse"></i></div>
  277. <div class="w-descr left pull-left text-center">
  278. <span class="testName text-uppercase w-name">Jitter</span>
  279. <br>
  280. <span class="w-name counter" id="jitter" ></span>
  281. </div>
  282. </div>
  283. </div>
  284. </div>
  285. <br/>
  286. </div>
  287. <div id="abortBtn" class="row" style="display: none" onclick="javascript:abortTest()">
  288. <div class="col-lg-12">
  289. <div class="content-box red-bg" style="cursor: pointer;">
  290. <h1 style="margin: 10px" class="text-uppercase text-center">Abort Speed Test</h1>
  291. <div class="clearfix"></div>
  292. </div>
  293. </div>
  294. </div>
  295. <div id="startBtn" class="row" onclick="javascript:runTest()">
  296. <div class="col-lg-12">
  297. <div class="content-box green-bg" style="cursor: pointer;">
  298. <h1 style="margin: 10px" class="text-uppercase text-center">Run Speed Test</h1>
  299. <div class="clearfix"></div>
  300. </div>
  301. </div>
  302. </div>
  303. <?php } ?>
  304. <?php if((PLEXSEARCH == "true" && qualifyUser(PLEXHOMEAUTH))) { ?>
  305. <div id="searchPlexRow" class="row">
  306. <div class="col-lg-12">
  307. <div class="content-box box-shadow big-box todo-list">
  308. <form id="plexSearchForm" onsubmit="return false;" autocomplete="off">
  309. <div class="">
  310. <div class="input-group">
  311. <div style="border-radius: 25px 0 0 25px; border:0" class="input-group-addon gray-bg"><i class="fa fa-search white"></i></div>
  312. <input id="searchInput" type="text" style="border-radius: 0;" autocomplete="off" name="search-title" class="form-control input-group-addon gray-bg" placeholder="Media Search">
  313. <div id="clearSearch" style="border-radius: 0 25px 25px 0;border:0; cursor: pointer;" class="input-group-addon gray-bg"><i class="fa fa-close white"></i></div>
  314. <button style="display:none" id="plexSearchForm_submit" class="btn btn-primary waves"></button>
  315. </div>
  316. </div>
  317. </form>
  318. <div id="resultshere" class="table-responsive"></div>
  319. </div>
  320. </div>
  321. </div>
  322. <?php } ?>
  323. <?php if((NZBGETURL != "" && qualifyUser(NZBGETHOMEAUTH)) || (SABNZBDURL != "" && qualifyUser(SABNZBDHOMEAUTH))) { ?>
  324. <div id="downloadClientRow" class="row">
  325. <div class="col-xs-12 col-md-12">
  326. <div class="content-box">
  327. <div class="tabbable panel with-nav-tabs panel-default">
  328. <div class="panel-heading">
  329. <div class="content-tools i-block pull-right">
  330. <a id="getDownloader" class="repeat-btn">
  331. <i class="fa fa-repeat"></i>
  332. </a>
  333. <a class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
  334. <i class="fa fa-chevron-down"></i>
  335. </a>
  336. <!-- Lets Move This To Homepage Settings
  337. <ul id="downloaderSeconds" class="dropdown-menu" style="top: 32px !important">
  338. <li data-value="5000"><a>Refresh every 5 seconds</a></li>
  339. <li data-value="10000"><a>Refresh every 10 seconds</a></li>
  340. <li data-value="30000"><a>Refresh every 30 seconds</a></li>
  341. <li data-value="60000"><a>Refresh every 60 seconds</a></li>
  342. </ul>
  343. -->
  344. </div>
  345. <h3 class="pull-left"><?php if(NZBGETURL != ""){ echo "NZBGet "; } if(SABNZBDURL != ""){ echo "SABnzbd "; } ?></h3>
  346. <ul class="nav nav-tabs pull-right">
  347. <li class="active"><a href="#downloadQueue" data-toggle="tab" aria-expanded="true"><?php echo $language->translate("QUEUE");?></a></li>
  348. <li class=""><a href="#downloadHistory" data-toggle="tab" aria-expanded="false"><?php echo $language->translate("HISTORY");?></a></li>
  349. </ul>
  350. <div class="clearfix"></div>
  351. </div>
  352. <div class="panel-body">
  353. <div class="tab-content">
  354. <div class="tab-pane fade active in" id="downloadQueue">
  355. <div class="table-responsive" style="max-height: 300px">
  356. <table class="table table-striped progress-widget zero-m" style="max-height: 300px">
  357. <thead>
  358. <tr>
  359. <th class="col-xs-7 nzbtable-file-row"><?php echo $language->translate("FILE");?></th>
  360. <th class="col-xs-2 nzbtable"><?php echo $language->translate("STATUS");?></th>
  361. <th class="col-xs-1 nzbtable"><?php echo $language->translate("CATEGORY");?></th>
  362. <th class="col-xs-2 nzbtable"><?php echo $language->translate("PROGRESS");?></th>
  363. </tr>
  364. </thead>
  365. <tbody class="dl-queue sabnzbd"></tbody>
  366. <tbody class="dl-queue nzbget"></tbody>
  367. </table>
  368. </div>
  369. </div>
  370. <div class="tab-pane fade" id="downloadHistory">
  371. <div class="table-responsive" style="max-height: 300px">
  372. <table class="table table-striped progress-widget zero-m" style="max-height: 300px">
  373. <thead>
  374. <tr>
  375. <th class="col-xs-7 nzbtable-file-row"><?php echo $language->translate("FILE");?></th>
  376. <th class="col-xs-2 nzbtable"><?php echo $language->translate("STATUS");?></th>
  377. <th class="col-xs-1 nzbtable"><?php echo $language->translate("CATEGORY");?></th>
  378. <th class="col-xs-2 nzbtable"><?php echo $language->translate("PROGRESS");?></th>
  379. </tr>
  380. </thead>
  381. <tbody class="dl-history sabnzbd"></tbody>
  382. <tbody class="dl-history nzbget"></tbody>
  383. </table>
  384. </div>
  385. </div>
  386. </div>
  387. </div>
  388. </div>
  389. </div>
  390. </div>
  391. </div>
  392. <?php } ?>
  393. <?php if (qualifyUser(PLEXHOMEAUTH) && PLEXTOKEN) { ?>
  394. <div id="plexRowNowPlaying" class="row">
  395. <?php if(PLEXPLAYINGNOW == "true"){ echo getPlexStreams(12, PLEXSHOWNAMES, $USER->role); } ?>
  396. </div>
  397. <div id="plexRow" class="row">
  398. <div class="col-lg-12">
  399. <?php
  400. if(PLEXRECENTMOVIE == "true" || PLEXRECENTTV == "true" || PLEXRECENTMUSIC == "true"){
  401. $plexArray = array("movie" => PLEXRECENTMOVIE, "season" => PLEXRECENTTV, "album" => PLEXRECENTMUSIC);
  402. echo getPlexRecent($plexArray);
  403. }
  404. ?>
  405. </div>
  406. </div>
  407. <?php } ?>
  408. <?php if (qualifyUser(EMBYHOMEAUTH) && EMBYTOKEN) { ?>
  409. <div id="embyRowNowPlaying" class="row">
  410. <?php if(EMBYPLAYINGNOW == "true"){ echo getEmbyStreams(12, EMBYSHOWNAMES, $USER->role); } ?>
  411. </div>
  412. <div id="embyRow" class="row">
  413. <div class="col-lg-12">
  414. <?php
  415. if(EMBYRECENTMOVIE == "true" || EMBYRECENTTV == "true" || EMBYRECENTMUSIC == "true"){
  416. $embyArray = array("Movie" => EMBYRECENTMOVIE, "Episode" => EMBYRECENTTV, "MusicAlbum" => EMBYRECENTMUSIC, "Series" => EMBYRECENTTV);
  417. echo getEmbyRecent($embyArray);
  418. }
  419. ?>
  420. </div>
  421. </div>
  422. <?php } ?>
  423. <?php if ((SONARRURL != "" && qualifyUser(SONARRHOMEAUTH)) || (RADARRURL != "" && qualifyUser(RADARRHOMEAUTH)) || (HEADPHONESURL != "" && qualifyUser(HEADPHONESHOMEAUTH)) || (SICKRAGEURL != "" && qualifyUser(SICKRAGEHOMEAUTH))) { ?>
  424. <div id="calendarLegendRow" class="row" style="padding: 0 0 10px 0;">
  425. <div class="col-lg-12 content-form form-inline">
  426. <div class="form-group">
  427. <select class="form-control" id="imagetype_selector" style="width: auto !important; display: inline-block">
  428. <option value="all">View All</option>
  429. <?php if(RADARRURL != ""){ echo '<option value="film">Movies</option>'; }?>
  430. <?php if(SONARRURL != "" || SICKRAGEURL != ""){ echo '<option value="tv">TV Shows</option>'; }?>
  431. <?php if(HEADPHONESURL != ""){ echo '<option value="music">Music</option>'; }?>
  432. </select>
  433. <span class="label label-primary well-sm">Available</span>
  434. <span class="label label-danger well-sm">Unavailable</span>
  435. <span class="label indigo-bg well-sm">Unreleased</span>
  436. <span class="label light-blue-bg well-sm">Premier</span>
  437. </div>
  438. </div>
  439. </div>
  440. <div id="calendarRow" class="row">
  441. <div class="col-lg-12">
  442. <div id="calendar" class="fc-calendar box-shadow fc fc-ltr fc-unthemed"></div>
  443. </div>
  444. </div>
  445. <?php } ?>
  446. </div>
  447. </div>
  448. <script>
  449. $('.close-btn').click(function(e){
  450. var closedBox = $(this).closest('div.content-box').remove();
  451. e.preventDefault();
  452. });
  453. $('#clearSearch').click(function(e){
  454. $('#searchInput').val("");
  455. $('#resultshere').html("");
  456. $('#searchInput').focus();
  457. e.preventDefault();
  458. });
  459. $(document).on("click", ".openTab", function(e) {
  460. if($(this).attr("openTab") === "true") {
  461. var isActive = parent.$("div[data-content-name^='<?php echo strtolower(PLEXTABNAME);?>']");
  462. var activeFrame = isActive.children('iframe');
  463. if(isActive.length === 1){
  464. activeFrame.attr("src", $(this).attr("href"));
  465. parent.$("li[name='<?php echo strtolower(PLEXTABNAME);?>']").trigger("click");
  466. }else{
  467. parent.$("li[name='<?php echo strtolower(PLEXTABNAME);?>']").trigger("click");
  468. parent.$("div[data-content-name^='<?php echo strtolower(PLEXTABNAME);?>']").children('iframe').attr("src", $(this).attr("href"));
  469. }
  470. e.preventDefault();
  471. }else{
  472. console.log("nope");
  473. }
  474. });
  475. function localStorageSupport() {
  476. return (('localStorage' in window) && window['localStorage'] !== null)
  477. }
  478. $( document ).ready(function() {
  479. $('#plexSearchForm').on('submit', function () {
  480. ajax_request('POST', 'search-plex', {
  481. searchtitle: $('#plexSearchForm [name=search-title]').val(),
  482. }).done(function(data){ $('#resultshere').html(data);});
  483. });
  484. $('.repeat-btn').click(function(){
  485. var refreshBox = $(this).closest('div.content-box');
  486. $("<div class='refresh-preloader'><div class='la-timer la-dark'><div></div></div></div>").appendTo(refreshBox).fadeIn(300);
  487. setTimeout(function(){
  488. var refreshPreloader = refreshBox.find('.refresh-preloader'),
  489. deletedRefreshBox = refreshPreloader.fadeOut(300, function(){
  490. refreshPreloader.remove();
  491. });
  492. },1500);
  493. });
  494. $(document).on('click', '.w-refresh', function(){
  495. var id = $(this).attr("link");
  496. $("div[np^='"+id+"']").toggle();
  497. });
  498. $('.recentItems').slick({
  499. slidesToShow: 13,
  500. slidesToScroll: 13,
  501. infinite: true,
  502. lazyLoad: 'ondemand',
  503. prevArrow: '<a class="zero-m pull-left prev-mail btn btn-default waves waves-button btn-sm waves-effect waves-float"><i class="fa fa-angle-left"></i></a>',
  504. nextArrow: '<a class="pull-left next-mail btn btn-default waves waves-button btn-sm waves-effect waves-float"><i class="fa fa-angle-right"></i></a>',
  505. appendArrows: '.recentHeader',
  506. responsive: [
  507. {
  508. breakpoint: 1750,
  509. settings: {
  510. slidesToShow: 12,
  511. slidesToScroll: 12,
  512. }
  513. },
  514. {
  515. breakpoint: 1600,
  516. settings: {
  517. slidesToShow: 11,
  518. slidesToScroll: 11,
  519. }
  520. },
  521. {
  522. breakpoint: 1450,
  523. settings: {
  524. slidesToShow: 10,
  525. slidesToScroll: 10,
  526. }
  527. },
  528. {
  529. breakpoint: 1300,
  530. settings: {
  531. slidesToShow: 9,
  532. slidesToScroll: 9,
  533. }
  534. },
  535. {
  536. breakpoint: 1150,
  537. settings: {
  538. slidesToShow: 8,
  539. slidesToScroll: 8,
  540. }
  541. },
  542. {
  543. breakpoint: 1000,
  544. settings: {
  545. slidesToShow: 7,
  546. slidesToScroll: 7,
  547. }
  548. },
  549. {
  550. breakpoint: 850,
  551. settings: {
  552. slidesToShow: 6,
  553. slidesToScroll: 6,
  554. }
  555. },
  556. {
  557. breakpoint: 700,
  558. settings: {
  559. slidesToShow: 5,
  560. slidesToScroll: 5,
  561. }
  562. },
  563. {
  564. breakpoint: 675,
  565. settings: {
  566. slidesToShow: 4,
  567. slidesToScroll: 4
  568. }
  569. },
  570. {
  571. breakpoint: 480,
  572. settings: {
  573. slidesToShow: 3,
  574. slidesToScroll: 3
  575. }
  576. }
  577. // You can unslick at a given breakpoint now by adding:
  578. // settings: "unslick"
  579. // instead of a settings object
  580. ]
  581. });
  582. var movieFiltered = false;
  583. var seasonFiltered = false;
  584. var albumFiltered = false;
  585. $('.js-filter-movie').on('click', function(){
  586. if (movieFiltered === false) {
  587. $('.recentItems').slick('slickFilter','.item-season, .item-album, .item-Series, .item-Episode, .item-MusicAlbum');
  588. $(this).text('Show Movies');
  589. movieFiltered = true;
  590. } else {
  591. $('.recentItems').slick('slickUnfilter');
  592. $(this).text('Hide Movies');
  593. movieFiltered = false;
  594. }
  595. });
  596. $('.js-filter-season').on('click', function(){
  597. if (seasonFiltered === false) {
  598. $('.recentItems').slick('slickFilter','.item-movie, .item-album, .item-Movie, .item-MusicAlbum');
  599. $(this).text('Show TV');
  600. seasonFiltered = true;
  601. } else {
  602. $('.recentItems').slick('slickUnfilter');
  603. $(this).text('Hide TV');
  604. seasonFiltered = false;
  605. }
  606. });
  607. $('.js-filter-album').on('click', function(){
  608. if (albumFiltered === false) {
  609. $('.recentItems').slick('slickFilter','.item-season, .item-movie, .item-Series, .item-Episode, .item-Movie');
  610. $(this).text('Show Music');
  611. albumFiltered = true;
  612. } else {
  613. $('.recentItems').slick('slickUnfilter');
  614. $(this).text('Hide Music');
  615. albumFiltered = false;
  616. }
  617. });
  618. /*$('.w-refresh').click(function(e){
  619. var moreInfo = $(this).closest('div.overlay').addClass("show");
  620. console.log(moreInfo);
  621. moreInfo.show();
  622. e.preventDefault();
  623. });*/
  624. $("body").niceScroll({
  625. railpadding: {top:0,right:0,left:0,bottom:0},
  626. scrollspeed: 30,
  627. mousescrollstep: 60
  628. });
  629. $(".table-responsive").niceScroll({
  630. railpadding: {top:0,right:0,left:0,bottom:0},
  631. scrollspeed: 30,
  632. mousescrollstep: 60
  633. });
  634. /*$(".carousel-caption").niceScroll({
  635. railpadding: {top:0,right:0,left:0,bottom:0},
  636. scrollspeed: 30,
  637. mousescrollstep: 60
  638. });*/
  639. // check if browser support HTML5 local storage
  640. <?php if((NZBGETURL != "" && qualifyUser(NZBGETHOMEAUTH)) || (SABNZBDURL != "" && qualifyUser(SABNZBDHOMEAUTH))){ ?>
  641. var queueRefresh = 30000;
  642. var historyRefresh = 120000; // This really doesn't need to happen that often
  643. var queueLoad = function() {
  644. <?php if(SABNZBDURL != "") { echo '$("tbody.dl-queue.sabnzbd").load("ajax.php?a=sabnzbd-update&list=queue");'; } ?>
  645. <?php if(NZBGETURL != "") { echo '$("tbody.dl-queue.nzbget").load("ajax.php?a=nzbget-update&list=listgroups");'; } ?>
  646. };
  647. var historyLoad = function() {
  648. <?php if(SABNZBDURL != "") { echo '$("tbody.dl-history.sabnzbd").load("ajax.php?a=sabnzbd-update&list=history");'; } ?>
  649. <?php if(NZBGETURL != "") { echo '$("tbody.dl-history.nzbget").load("ajax.php?a=nzbget-update&list=history");'; } ?>
  650. };
  651. // Initial Loads
  652. queueLoad();
  653. historyLoad();
  654. // Interval Loads
  655. var queueInterval = setInterval(queueLoad, queueRefresh);
  656. var historyInterval = setInterval(historyLoad, historyRefresh);
  657. // Manual Load
  658. $("#getDownloader").click(function() {
  659. queueLoad();
  660. historyLoad();
  661. });
  662. <?php } ?>
  663. });
  664. </script>
  665. <?php if ((SONARRURL != "" && qualifyUser(SONARRHOMEAUTH)) || (RADARRURL != "" && qualifyUser(RADARRHOMEAUTH)) || (HEADPHONESURL != "" && qualifyUser(HEADPHONESHOMEAUTH)) || (SICKRAGEURL != "" && qualifyUser(SICKRAGEHOMEAUTH))) { ?>
  666. <script>
  667. $(function () {
  668. var date = new Date();
  669. var d = date.getDate();
  670. var m = date.getMonth();
  671. var y = date.getFullYear();
  672. $('#calendar').fullCalendar({
  673. eventLimit: false,
  674. firstDay: <?php echo CALENDARSTART;?>,
  675. height: "auto",
  676. defaultView: '<?php echo CALENDARVIEW;?>',
  677. header: {
  678. left: 'prev,next,',
  679. center: 'title',
  680. right: 'today, month, basicDay,basicWeek,'
  681. },
  682. views: {
  683. basicDay: { buttonText: '<?php echo $language->translate("DAY");?>', eventLimit: false },
  684. basicWeek: { buttonText: '<?php echo $language->translate("WEEK");?>', eventLimit: false },
  685. month: { buttonText: '<?php echo $language->translate("MONTH");?>', eventLimit: false },
  686. today: { buttonText: '<?php echo $language->translate("TODAY");?>' },
  687. },
  688. events: [
  689. <?php
  690. if (SICKRAGEURL != "" && qualifyUser(SICKRAGEHOMEAUTH)){
  691. try {
  692. echo getSickrageCalendarWanted($sickrage->future());
  693. } catch (Exception $e) {
  694. writeLog("error", "SICKRAGE/BEARD ERROR: ".strip($e->getMessage()));
  695. } try {
  696. echo getSickrageCalendarHistory($sickrage->history("100","downloaded"));
  697. } catch (Exception $e) {
  698. writeLog("error", "SICKRAGE/BEARD ERROR: ".strip($e->getMessage()));
  699. }
  700. }
  701. if (SONARRURL != "" && qualifyUser(SONARRHOMEAUTH)){
  702. try {
  703. echo getSonarrCalendar($sonarr->getCalendar($startDate, $endDate));
  704. } catch (Exception $e) {
  705. writeLog("error", "SONARR ERROR: ".strip($e->getMessage()));
  706. }
  707. }
  708. if (RADARRURL != "" && qualifyUser(RADARRHOMEAUTH)){
  709. try {
  710. echo getRadarrCalendar($radarr->getCalendar($startDate, $endDate));
  711. } catch (Exception $e) {
  712. writeLog("error", "RADARR ERROR: ".strip($e->getMessage()));
  713. }
  714. }
  715. if (HEADPHONESURL != "" && qualifyUser(HEADPHONESHOMEAUTH)){
  716. echo getHeadphonesCalendar(HEADPHONESURL, HEADPHONESKEY, "getHistory");
  717. echo getHeadphonesCalendar(HEADPHONESURL, HEADPHONESKEY, "getWanted");
  718. }?>
  719. ],
  720. eventRender: function eventRender( event, element, view ) {
  721. return ['all', event.imagetype].indexOf($('#imagetype_selector').val()) >= 0
  722. },
  723. editable: false,
  724. droppable: false,
  725. timeFormat: '<?php echo CALTIMEFORMAT; ?>',
  726. });
  727. });
  728. $('#imagetype_selector').on('change',function(){
  729. $('#calendar').fullCalendar('rerenderEvents');
  730. })
  731. var $divs = $("div.row");
  732. $('#numBnt').on('click', function () {
  733. var numericallyOrderedDivs = $divs.sort(function (a, b) {
  734. return $(a).find("sort").text() > $(b).find("sort").text();
  735. });
  736. $("#content").html(numericallyOrderedDivs);
  737. });
  738. </script>
  739. <?php } ?>
  740. </body>
  741. </html>