option-functions.php 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146
  1. <?php
  2. trait OptionsFunction
  3. {
  4. public function settingsOptionGroup($options = [])
  5. {
  6. $settings = [];
  7. foreach ($options as $option) {
  8. $optionType = $option[0] ? $option[0] : false;
  9. $optionName = $option[1] ? $option[1] : null;
  10. $optionExtras = $option[2] ? $option[2] : [];
  11. $setting = $this->settingsOption($optionType, $optionName, $optionExtras);
  12. array_push($settings, $setting);
  13. }
  14. return $settings;
  15. }
  16. public function settingsOption($type, $name = null, $extras = null)
  17. {
  18. $type = strtolower(str_replace('-', '', $type));
  19. $setting = [
  20. 'name' => $name,
  21. 'value' => $this->config[$name] ?? ''
  22. ];
  23. switch ($type) {
  24. case 'enable':
  25. $settingMerge = [
  26. 'type' => 'switch',
  27. 'label' => 'Enable',
  28. ];
  29. break;
  30. case 'auth':
  31. $settingMerge = [
  32. 'type' => 'select',
  33. 'label' => 'Minimum Authentication',
  34. 'options' => $this->groupOptions
  35. ];
  36. break;
  37. case 'refresh':
  38. $settingMerge = [
  39. 'type' => 'select',
  40. 'label' => 'Refresh Seconds',
  41. 'options' => $this->timeOptions()
  42. ];
  43. break;
  44. case 'combine':
  45. case 'combine-downloader':
  46. $settingMerge = [
  47. 'type' => 'switch',
  48. 'label' => 'Add to Combined Downloader',
  49. ];
  50. break;
  51. case 'test':
  52. $settingMerge = [
  53. 'type' => 'button',
  54. 'label' => '',
  55. 'icon' => 'fa fa-flask',
  56. 'class' => 'pull-right',
  57. 'text' => 'Test Connection',
  58. 'attr' => 'onclick="testAPIConnection(\'' . $name . '\')"'
  59. ];
  60. break;
  61. case 'url':
  62. $settingMerge = [
  63. 'type' => 'input',
  64. 'label' => 'URL',
  65. 'help' => 'Please make sure to use local IP address and port - You also may use local dns name too.',
  66. 'placeholder' => 'http(s)://hostname:port'
  67. ];
  68. break;
  69. case 'multipleurl':
  70. $settingMerge = [
  71. 'type' => 'select2',
  72. 'class' => 'select2-multiple',
  73. 'id' => $name . '-select',
  74. 'label' => 'Multiple URL\'s',
  75. 'help' => 'Please make sure to use local IP address and port - You also may use local dns name too.',
  76. 'placeholder' => 'http(s)://hostname:port',
  77. 'options' => $this->makeOptionsFromValues($this->config[$name]),
  78. 'settings' => '{tags: true, selectOnClose: true, closeOnSelect: true}',
  79. ];
  80. break;
  81. case 'multiple':
  82. $settingMerge = [
  83. 'type' => 'select2',
  84. 'class' => 'select2-multiple',
  85. 'id' => $name . '-select',
  86. 'label' => 'Multiple Values\'s',
  87. 'options' => $this->makeOptionsFromValues($this->config[$name]),
  88. 'settings' => '{tags: true, selectOnClose: true, closeOnSelect: true}',
  89. ];
  90. break;
  91. case 'username':
  92. $settingMerge = [
  93. 'type' => 'input',
  94. 'label' => 'Username',
  95. ];
  96. break;
  97. case 'password':
  98. $settingMerge = [
  99. 'type' => 'password',
  100. 'label' => 'Password',
  101. ];
  102. break;
  103. case 'passwordalt':
  104. $settingMerge = [
  105. 'type' => 'password-alt',
  106. 'label' => 'Password',
  107. ];
  108. break;
  109. case 'apikey':
  110. case 'token':
  111. $settingMerge = [
  112. 'type' => 'password-alt',
  113. 'label' => 'API Key/Token',
  114. ];
  115. break;
  116. case 'multipleapikey':
  117. case 'multipletoken':
  118. $settingMerge = [
  119. 'type' => 'select2',
  120. 'class' => 'select2-multiple',
  121. 'id' => $name . '-select',
  122. 'label' => 'Multiple API Key/Token\'s',
  123. 'options' => $this->makeOptionsFromValues($this->config[$name]),
  124. 'settings' => '{tags: true, theme: "default password-alt", selectOnClose: true, closeOnSelect: true}',
  125. ];
  126. break;
  127. case 'notice':
  128. $settingMerge = [
  129. 'type' => 'html',
  130. 'override' => 12,
  131. 'label' => '',
  132. 'html' => '
  133. <div class="row">
  134. <div class="col-lg-12">
  135. <div class="panel panel-' . ($extras['notice'] ?? 'info') . '">
  136. <div class="panel-heading">
  137. <span lang="en">' . ($extras['title'] ?? 'Attention') . '</span>
  138. </div>
  139. <div class="panel-wrapper collapse in" aria-expanded="true">
  140. <div class="panel-body">
  141. <span lang="en">' . ($extras['body'] ?? '') . '</span>
  142. <span>' . ($extras['bodyHTML'] ?? '') . '</span>
  143. </div>
  144. </div>
  145. </div>
  146. </div>
  147. </div>
  148. '
  149. ];
  150. break;
  151. case 'socks':
  152. $settingMerge = [
  153. 'type' => 'html',
  154. 'override' => 12,
  155. 'label' => '',
  156. 'html' => '
  157. <div class="panel panel-default">
  158. <div class="panel-wrapper collapse in">
  159. <div class="panel-body">' . $this->socksHeadingHTML($name) . '</div>
  160. </div>
  161. </div>'
  162. ];
  163. break;
  164. case 'about':
  165. $settingMerge = [
  166. 'type' => 'html',
  167. 'override' => 12,
  168. 'label' => '',
  169. 'html' => '
  170. <div class="panel panel-default">
  171. <div class="panel-wrapper collapse in">
  172. <div class="panel-body">
  173. <h3 lang="en">' . ucwords($name) . ' Homepage Item</h3>
  174. <p lang="en">' . $extras["about"] . '</p>
  175. </div>
  176. </div>
  177. </div>'
  178. ];
  179. break;
  180. case 'title':
  181. $settingMerge = [
  182. 'type' => 'input',
  183. 'label' => 'Title',
  184. 'help' => 'Sets the title of this homepage module',
  185. ];
  186. break;
  187. case 'toggletitle':
  188. $settingMerge = [
  189. 'type' => 'switch',
  190. 'label' => 'Toggle Title',
  191. 'help' => 'Shows/hides the title of this homepage module'
  192. ];
  193. break;
  194. case 'disablecertcheck':
  195. $settingMerge = [
  196. 'type' => 'switch',
  197. 'label' => 'Disable Certificate Check',
  198. ];
  199. break;
  200. case 'usecustomcertificate':
  201. $settingMerge = [
  202. 'type' => 'switch',
  203. 'label' => 'Use Custom Certificate',
  204. ];
  205. break;
  206. case 'hideseeding':
  207. $settingMerge = [
  208. 'type' => 'switch',
  209. 'label' => 'Hide Seeding',
  210. ];
  211. case 'hidecompleted':
  212. $settingMerge = [
  213. 'type' => 'switch',
  214. 'label' => 'Hide Completed',
  215. ];
  216. break;
  217. case 'limit':
  218. $settingMerge = [
  219. 'type' => 'number',
  220. 'label' => 'Item Limit',
  221. ];
  222. break;
  223. case 'mediasearchserver':
  224. $settingMerge = [
  225. 'type' => 'select',
  226. 'label' => 'Media Search Server',
  227. 'options' => $this->mediaServerOptions()
  228. ];
  229. break;
  230. case 'imagecachequality':
  231. $settingMerge = [
  232. 'type' => 'select',
  233. 'label' => 'Image Cache Quality',
  234. 'options' => [
  235. [
  236. 'name' => 'Low',
  237. 'value' => '.5'
  238. ],
  239. [
  240. 'name' => '1x',
  241. 'value' => '1'
  242. ],
  243. [
  244. 'name' => '2x',
  245. 'value' => '2'
  246. ],
  247. [
  248. 'name' => '3x',
  249. 'value' => '3'
  250. ]
  251. ]
  252. ];
  253. break;
  254. case 'blank':
  255. $settingMerge = [
  256. 'type' => 'blank',
  257. 'label' => '',
  258. ];
  259. break;
  260. case 'plexlibraryexclude':
  261. $settingMerge = [
  262. 'type' => 'select2',
  263. 'class' => 'select2-multiple',
  264. 'id' => $name . '-exclude-select',
  265. 'label' => 'Libraries to Exclude',
  266. 'options' => $extras['options']
  267. ];
  268. break;
  269. case 'plexlibraryinclude':
  270. $settingMerge = [
  271. 'type' => 'select2',
  272. 'class' => 'select2-multiple',
  273. 'id' => $name . '-include-select',
  274. 'label' => 'Libraries to Include',
  275. 'options' => $extras['options']
  276. ];
  277. break;
  278. // HTML ITEMS
  279. // precodeeditor possibly not needed anymore
  280. case 'precodeeditor':
  281. $settingMerge = [
  282. 'type' => 'textbox',
  283. 'class' => 'hidden ' . $name . 'Textarea',
  284. 'label' => '',
  285. ];
  286. break;
  287. case 'codeeditor':
  288. $mode = strtolower($extras['mode'] ?? 'css');
  289. switch ($mode) {
  290. case 'html':
  291. case 'javascript':
  292. $mode = 'ace/mode/' . $mode;
  293. break;
  294. case 'js':
  295. $mode = 'ace/mode/javascript';
  296. break;
  297. default:
  298. $mode = 'ace/mode/css';
  299. break;
  300. }
  301. $settingMerge = [
  302. 'type' => 'html',
  303. 'override' => 12,
  304. 'label' => 'Custom Code',
  305. 'html' => '
  306. <textarea data-changed="false" class="form-control hidden ' . $name . 'Textarea" name="' . $name . '" data-type="textbox" autocomplete="new-password">' . $this->config[$name] . '</textarea>
  307. <div id="' . $name . 'Editor" style="height:300px">' . htmlentities($this->config[$name]) . '</div>
  308. <script>
  309. let mode = ace.require("' . $mode . '").Mode;
  310. ' . $name . ' = ace.edit("' . $name . 'Editor");
  311. ' . $name . '.session.setMode(new mode());
  312. ' . $name . '.setTheme("ace/theme/idle_fingers");
  313. ' . $name . '.setShowPrintMargin(false);
  314. ' . $name . '.session.on("change", function(delta) { $(".' . $name . 'Textarea").val(' . $name . '.getValue()) });
  315. </script>
  316. '
  317. ];
  318. break;
  319. // CALENDAR ITEMS
  320. case 'calendarstart':
  321. $settingMerge = [
  322. 'type' => 'number',
  323. 'label' => '# of Days Before'
  324. ];
  325. break;
  326. case 'calendarend':
  327. $settingMerge = [
  328. 'type' => 'number',
  329. 'label' => '# of Days After'
  330. ];
  331. break;
  332. case 'calendarstartingday':
  333. case 'calendarstartday':
  334. case 'calendarstart':
  335. $settingMerge = [
  336. 'type' => 'select',
  337. 'label' => 'Start Day',
  338. 'options' => $this->daysOptions()
  339. ];
  340. break;
  341. case 'calendardefaultview':
  342. $settingMerge = [
  343. 'type' => 'select',
  344. 'label' => 'Default View',
  345. 'options' => $this->calendarDefaultOptions()
  346. ];
  347. break;
  348. case 'calendartimeformat':
  349. $settingMerge = [
  350. 'type' => 'select',
  351. 'label' => 'Time Format',
  352. 'options' => $this->timeFormatOptions()
  353. ];
  354. break;
  355. case 'calendarlocale':
  356. $settingMerge = [
  357. 'type' => 'select',
  358. 'label' => 'Locale',
  359. 'options' => $this->calendarLocaleOptions()
  360. ];
  361. break;
  362. case 'calendarlimit':
  363. $settingMerge = [
  364. 'type' => 'select',
  365. 'label' => 'Items Per Day',
  366. 'options' => $this->limitOptions()
  367. ];
  368. break;
  369. default:
  370. $settingMerge = [
  371. 'type' => strtolower($type),
  372. 'label' => ''
  373. ];
  374. break;
  375. }
  376. $setting = array_merge($settingMerge, $setting);
  377. if ($extras) {
  378. if (gettype($extras) == 'array') {
  379. $setting = array_merge($setting, $extras);
  380. }
  381. }
  382. return $setting;
  383. }
  384. public function makeOptionsFromValues($values = null)
  385. {
  386. $formattedValues = [];
  387. if (strpos($values, ',') !== false) {
  388. $explode = explode(',', $values);
  389. foreach ($explode as $item) {
  390. $formattedValues[] = [
  391. 'name' => $item,
  392. 'value' => $item
  393. ];
  394. }
  395. } elseif ($values == '') {
  396. $formattedValues = '';
  397. } else {
  398. $formattedValues[] = [
  399. 'name' => $values,
  400. 'value' => $values
  401. ];
  402. }
  403. return $formattedValues;
  404. }
  405. public function calendarLocaleOptions()
  406. {
  407. return [
  408. [
  409. 'name' => 'Arabic (Standard)',
  410. 'value' => 'ar',
  411. ],
  412. [
  413. 'name' => 'Arabic (Morocco)',
  414. 'value' => 'ar-ma',
  415. ],
  416. [
  417. 'name' => 'Arabic (Saudi Arabia)',
  418. 'value' => 'ar-sa'
  419. ],
  420. [
  421. 'value' => 'ar-tn',
  422. 'name' => 'Arabic (Tunisia)'
  423. ],
  424. [
  425. 'value' => 'bg',
  426. 'name' => 'Bulgarian'
  427. ],
  428. [
  429. 'value' => 'ca',
  430. 'name' => 'Catalan'
  431. ],
  432. [
  433. 'value' => 'cs',
  434. 'name' => 'Czech'
  435. ],
  436. [
  437. 'value' => 'da',
  438. 'name' => 'Danish'
  439. ],
  440. [
  441. 'value' => 'de',
  442. 'name' => 'German (Standard)'
  443. ],
  444. [
  445. 'value' => 'de-at',
  446. 'name' => 'German (Austria)'
  447. ],
  448. [
  449. 'value' => 'el',
  450. 'name' => 'Greek'
  451. ],
  452. [
  453. 'value' => 'en',
  454. 'name' => 'English'
  455. ],
  456. [
  457. 'value' => 'en-au',
  458. 'name' => 'English (Australia)'
  459. ],
  460. [
  461. 'value' => 'en-ca',
  462. 'name' => 'English (Canada)'
  463. ],
  464. [
  465. 'value' => 'en-gb',
  466. 'name' => 'English (United Kingdom)'
  467. ],
  468. [
  469. 'value' => 'es',
  470. 'name' => 'Spanish'
  471. ],
  472. [
  473. 'value' => 'fa',
  474. 'name' => 'Farsi'
  475. ],
  476. [
  477. 'value' => 'fi',
  478. 'name' => 'Finnish'
  479. ],
  480. [
  481. 'value' => 'fr',
  482. 'name' => 'French (Standard)'
  483. ],
  484. [
  485. 'value' => 'fr-ca',
  486. 'name' => 'French (Canada)'
  487. ],
  488. [
  489. 'value' => 'he',
  490. 'name' => 'Hebrew'
  491. ],
  492. [
  493. 'value' => 'hi',
  494. 'name' => 'Hindi'
  495. ],
  496. [
  497. 'value' => 'hr',
  498. 'name' => 'Croatian'
  499. ],
  500. [
  501. 'value' => 'hu',
  502. 'name' => 'Hungarian'
  503. ],
  504. [
  505. 'value' => 'id',
  506. 'name' => 'Indonesian'
  507. ],
  508. [
  509. 'value' => 'is',
  510. 'name' => 'Icelandic'
  511. ],
  512. [
  513. 'value' => 'it',
  514. 'name' => 'Italian'
  515. ],
  516. [
  517. 'value' => 'ja',
  518. 'name' => 'Japanese'
  519. ],
  520. [
  521. 'value' => 'ko',
  522. 'name' => 'Korean'
  523. ],
  524. [
  525. 'value' => 'lt',
  526. 'name' => 'Lithuanian'
  527. ],
  528. [
  529. 'value' => 'lv',
  530. 'name' => 'Latvian'
  531. ],
  532. [
  533. 'value' => 'nb',
  534. 'name' => 'Norwegian (Bokmal)'
  535. ],
  536. [
  537. 'value' => 'nl',
  538. 'name' => 'Dutch (Standard)'
  539. ],
  540. [
  541. 'value' => 'pl',
  542. 'name' => 'Polish'
  543. ],
  544. [
  545. 'value' => 'pt',
  546. 'name' => 'Portuguese'
  547. ],
  548. [
  549. 'value' => 'pt-br',
  550. 'name' => 'Portuguese (Brazil)'
  551. ],
  552. [
  553. 'value' => 'ro',
  554. 'name' => 'Romanian'
  555. ],
  556. [
  557. 'value' => 'ru',
  558. 'name' => 'Russian'
  559. ],
  560. [
  561. 'value' => 'sk',
  562. 'name' => 'Slovak'
  563. ],
  564. [
  565. 'value' => 'sl',
  566. 'name' => 'Slovenian'
  567. ],
  568. [
  569. 'value' => 'sr',
  570. 'name' => 'Serbian'
  571. ],
  572. [
  573. 'value' => 'sv',
  574. 'name' => 'Swedish'
  575. ],
  576. [
  577. 'value' => 'th',
  578. 'name' => 'Thai'
  579. ],
  580. [
  581. 'value' => 'tr',
  582. 'name' => 'Turkish'
  583. ],
  584. [
  585. 'value' => 'uk',
  586. 'name' => 'Ukrainian'
  587. ],
  588. [
  589. 'value' => 'vi',
  590. 'name' => 'Vietnamese'
  591. ],
  592. [
  593. 'value' => 'zh-cn',
  594. 'name' => 'Chinese (PRC)'
  595. ],
  596. [
  597. 'value' => 'zh-tw',
  598. 'name' => 'Chinese (Taiwan)'
  599. ]
  600. ];
  601. }
  602. public function daysOptions()
  603. {
  604. return array(
  605. array(
  606. 'name' => 'Sunday',
  607. 'value' => '0'
  608. ),
  609. array(
  610. 'name' => 'Monday',
  611. 'value' => '1'
  612. ),
  613. array(
  614. 'name' => 'Tueday',
  615. 'value' => '2'
  616. ),
  617. array(
  618. 'name' => 'Wednesday',
  619. 'value' => '3'
  620. ),
  621. array(
  622. 'name' => 'Thursday',
  623. 'value' => '4'
  624. ),
  625. array(
  626. 'name' => 'Friday',
  627. 'value' => '5'
  628. ),
  629. array(
  630. 'name' => 'Saturday',
  631. 'value' => '6'
  632. )
  633. );
  634. }
  635. public function mediaServerOptions()
  636. {
  637. return array(
  638. array(
  639. 'name' => 'N/A',
  640. 'value' => ''
  641. ),
  642. array(
  643. 'name' => 'Plex',
  644. 'value' => 'plex'
  645. ),
  646. array(
  647. 'name' => 'Emby [Not Available]',
  648. 'value' => 'emby'
  649. )
  650. );
  651. }
  652. public function requestTvOptions($includeUserOption = false)
  653. {
  654. $options = [
  655. [
  656. 'name' => 'All Seasons',
  657. 'value' => 'all'
  658. ],
  659. [
  660. 'name' => 'First Season Only',
  661. 'value' => 'first'
  662. ],
  663. [
  664. 'name' => 'Last Season Only',
  665. 'value' => 'last'
  666. ],
  667. ];
  668. $userOption = [
  669. 'name' => 'Let User Select',
  670. 'value' => 'user'
  671. ];
  672. if ($includeUserOption) {
  673. array_push($options, $userOption);
  674. }
  675. return $options;
  676. }
  677. public function requestServiceOptions()
  678. {
  679. return [
  680. [
  681. 'name' => 'Ombi',
  682. 'value' => 'ombi'
  683. ],
  684. [
  685. 'name' => 'Overseerr',
  686. 'value' => 'overseerr'
  687. ]
  688. ];
  689. }
  690. public function limitOptions()
  691. {
  692. return array(
  693. array(
  694. 'name' => '1 Item',
  695. 'value' => '1'
  696. ),
  697. array(
  698. 'name' => '2 Items',
  699. 'value' => '2'
  700. ),
  701. array(
  702. 'name' => '3 Items',
  703. 'value' => '3'
  704. ),
  705. array(
  706. 'name' => '4 Items',
  707. 'value' => '4'
  708. ),
  709. array(
  710. 'name' => '5 Items',
  711. 'value' => '5'
  712. ),
  713. array(
  714. 'name' => '6 Items',
  715. 'value' => '6'
  716. ),
  717. array(
  718. 'name' => '7 Items',
  719. 'value' => '7'
  720. ),
  721. array(
  722. 'name' => '8 Items',
  723. 'value' => '8'
  724. ),
  725. array(
  726. 'name' => 'Unlimited',
  727. 'value' => '1000'
  728. ),
  729. );
  730. }
  731. public function notificationTypesOptions()
  732. {
  733. return array(
  734. array(
  735. 'name' => 'Toastr',
  736. 'value' => 'toastr'
  737. ),
  738. array(
  739. 'name' => 'Izi',
  740. 'value' => 'izi'
  741. ),
  742. array(
  743. 'name' => 'Alertify',
  744. 'value' => 'alertify'
  745. ),
  746. array(
  747. 'name' => 'Noty',
  748. 'value' => 'noty'
  749. ),
  750. );
  751. }
  752. public function notificationPositionsOptions()
  753. {
  754. return array(
  755. array(
  756. 'name' => 'Bottom Right',
  757. 'value' => 'br'
  758. ),
  759. array(
  760. 'name' => 'Bottom Left',
  761. 'value' => 'bl'
  762. ),
  763. array(
  764. 'name' => 'Bottom Center',
  765. 'value' => 'bc'
  766. ),
  767. array(
  768. 'name' => 'Top Right',
  769. 'value' => 'tr'
  770. ),
  771. array(
  772. 'name' => 'Top Left',
  773. 'value' => 'tl'
  774. ),
  775. array(
  776. 'name' => 'Top Center',
  777. 'value' => 'tc'
  778. ),
  779. array(
  780. 'name' => 'Center',
  781. 'value' => 'c'
  782. ),
  783. );
  784. }
  785. public function timeOptions()
  786. {
  787. return array(
  788. array(
  789. 'name' => '2.5',
  790. 'value' => '2500'
  791. ),
  792. array(
  793. 'name' => '5',
  794. 'value' => '5000'
  795. ),
  796. array(
  797. 'name' => '10',
  798. 'value' => '10000'
  799. ),
  800. array(
  801. 'name' => '15',
  802. 'value' => '15000'
  803. ),
  804. array(
  805. 'name' => '30',
  806. 'value' => '30000'
  807. ),
  808. array(
  809. 'name' => '60 [1 Minute]',
  810. 'value' => '60000'
  811. ),
  812. array(
  813. 'name' => '300 [5 Minutes]',
  814. 'value' => '300000'
  815. ),
  816. array(
  817. 'name' => '600 [10 Minutes]',
  818. 'value' => '600000'
  819. ),
  820. array(
  821. 'name' => '900 [15 Minutes]',
  822. 'value' => '900000'
  823. ),
  824. array(
  825. 'name' => '1800 [30 Minutes]',
  826. 'value' => '1800000'
  827. ),
  828. array(
  829. 'name' => '3600 [1 Hour]',
  830. 'value' => '3600000'
  831. ),
  832. );
  833. }
  834. public function netdataOptions()
  835. {
  836. return [
  837. [
  838. 'name' => 'Disk Read',
  839. 'value' => 'disk-read',
  840. ],
  841. [
  842. 'name' => 'Disk Write',
  843. 'value' => 'disk-write',
  844. ],
  845. [
  846. 'name' => 'CPU',
  847. 'value' => 'cpu'
  848. ],
  849. [
  850. 'name' => 'Network Inbound',
  851. 'value' => 'net-in',
  852. ],
  853. [
  854. 'name' => 'Network Outbound',
  855. 'value' => 'net-out',
  856. ],
  857. [
  858. 'name' => 'Used RAM',
  859. 'value' => 'ram-used',
  860. ],
  861. [
  862. 'name' => 'Used Swap',
  863. 'value' => 'swap-used',
  864. ],
  865. [
  866. 'name' => 'Disk space used',
  867. 'value' => 'disk-used',
  868. ],
  869. [
  870. 'name' => 'Disk space available',
  871. 'value' => 'disk-avail',
  872. ],
  873. [
  874. 'name' => 'Custom',
  875. 'value' => 'custom',
  876. ]
  877. ];
  878. }
  879. public function netdataChartOptions()
  880. {
  881. return [
  882. [
  883. 'name' => 'Easy Pie Chart',
  884. 'value' => 'easypiechart',
  885. ],
  886. [
  887. 'name' => 'Gauge',
  888. 'value' => 'gauge'
  889. ]
  890. ];
  891. }
  892. public function netdataColourOptions()
  893. {
  894. return [
  895. [
  896. 'name' => 'Red',
  897. 'value' => 'fe3912',
  898. ],
  899. [
  900. 'name' => 'Green',
  901. 'value' => '46e302',
  902. ],
  903. [
  904. 'name' => 'Purple',
  905. 'value' => 'CC22AA'
  906. ],
  907. [
  908. 'name' => 'Blue',
  909. 'value' => '5054e6',
  910. ],
  911. [
  912. 'name' => 'Yellow',
  913. 'value' => 'dddd00',
  914. ],
  915. [
  916. 'name' => 'Orange',
  917. 'value' => 'd66300',
  918. ]
  919. ];
  920. }
  921. public function netdataSizeOptions()
  922. {
  923. return [
  924. [
  925. 'name' => 'Large',
  926. 'value' => 'lg',
  927. ],
  928. [
  929. 'name' => 'Medium',
  930. 'value' => 'md',
  931. ],
  932. [
  933. 'name' => 'Small',
  934. 'value' => 'sm'
  935. ]
  936. ];
  937. }
  938. public function timeFormatOptions()
  939. {
  940. return array(
  941. array(
  942. 'name' => '6p',
  943. 'value' => 'h(:mm)t'
  944. ),
  945. array(
  946. 'name' => '6:00p',
  947. 'value' => 'h:mmt'
  948. ),
  949. array(
  950. 'name' => '6pm',
  951. 'value' => 'h(:mm)a'
  952. ),
  953. array(
  954. 'name' => '6:00pm',
  955. 'value' => 'h:mma'
  956. ),
  957. array(
  958. 'name' => '6:00',
  959. 'value' => 'h:mm'
  960. ),
  961. array(
  962. 'name' => '18',
  963. 'value' => 'H(:mm)'
  964. ),
  965. array(
  966. 'name' => '18:00',
  967. 'value' => 'H:mm'
  968. )
  969. );
  970. }
  971. public function rTorrentSortOptions()
  972. {
  973. return array(
  974. array(
  975. 'name' => 'Date Desc',
  976. 'value' => 'dated'
  977. ),
  978. array(
  979. 'name' => 'Date Asc',
  980. 'value' => 'datea'
  981. ),
  982. array(
  983. 'name' => 'Hash Desc',
  984. 'value' => 'hashd'
  985. ),
  986. array(
  987. 'name' => 'Hash Asc',
  988. 'value' => 'hasha'
  989. ),
  990. array(
  991. 'name' => 'Name Desc',
  992. 'value' => 'named'
  993. ),
  994. array(
  995. 'name' => 'Name Asc',
  996. 'value' => 'namea'
  997. ),
  998. array(
  999. 'name' => 'Size Desc',
  1000. 'value' => 'sized'
  1001. ),
  1002. array(
  1003. 'name' => 'Size Asc',
  1004. 'value' => 'sizea'
  1005. ),
  1006. array(
  1007. 'name' => 'Label Desc',
  1008. 'value' => 'labeld'
  1009. ),
  1010. array(
  1011. 'name' => 'Label Asc',
  1012. 'value' => 'labela'
  1013. ),
  1014. array(
  1015. 'name' => 'Status Desc',
  1016. 'value' => 'statusd'
  1017. ),
  1018. array(
  1019. 'name' => 'Status Asc',
  1020. 'value' => 'statusa'
  1021. ),
  1022. );
  1023. }
  1024. public function qBittorrentApiOptions()
  1025. {
  1026. return array(
  1027. array(
  1028. 'name' => 'V1',
  1029. 'value' => '1'
  1030. ),
  1031. array(
  1032. 'name' => 'V2',
  1033. 'value' => '2'
  1034. ),
  1035. );
  1036. }
  1037. public function qBittorrentSortOptions()
  1038. {
  1039. return array(
  1040. array(
  1041. 'name' => 'Hash',
  1042. 'value' => 'hash'
  1043. ),
  1044. array(
  1045. 'name' => 'Name',
  1046. 'value' => 'name'
  1047. ),
  1048. array(
  1049. 'name' => 'Size',
  1050. 'value' => 'size'
  1051. ),
  1052. array(
  1053. 'name' => 'Progress',
  1054. 'value' => 'progress'
  1055. ),
  1056. array(
  1057. 'name' => 'Download Speed',
  1058. 'value' => 'dlspeed'
  1059. ),
  1060. array(
  1061. 'name' => 'Upload Speed',
  1062. 'value' => 'upspeed'
  1063. ),
  1064. array(
  1065. 'name' => 'Priority',
  1066. 'value' => 'priority'
  1067. ),
  1068. array(
  1069. 'name' => 'Number of Seeds',
  1070. 'value' => 'num_seeds'
  1071. ),
  1072. array(
  1073. 'name' => 'Number of Seeds in Swarm',
  1074. 'value' => 'num_complete'
  1075. ),
  1076. array(
  1077. 'name' => 'Number of Leechers',
  1078. 'value' => 'num_leechs'
  1079. ),
  1080. array(
  1081. 'name' => 'Number of Leechers in Swarm',
  1082. 'value' => 'num_incomplete'
  1083. ),
  1084. array(
  1085. 'name' => 'Ratio',
  1086. 'value' => 'ratio'
  1087. ),
  1088. array(
  1089. 'name' => 'ETA',
  1090. 'value' => 'eta'
  1091. ),
  1092. array(
  1093. 'name' => 'State',
  1094. 'value' => 'state'
  1095. ),
  1096. array(
  1097. 'name' => 'Category',
  1098. 'value' => 'category'
  1099. )
  1100. );
  1101. }
  1102. public function calendarDefaultOptions()
  1103. {
  1104. return array(
  1105. array(
  1106. 'name' => 'Month',
  1107. 'value' => 'month'
  1108. ),
  1109. array(
  1110. 'name' => 'Day',
  1111. 'value' => 'basicDay'
  1112. ),
  1113. array(
  1114. 'name' => 'Week',
  1115. 'value' => 'basicWeek'
  1116. ),
  1117. array(
  1118. 'name' => 'List',
  1119. 'value' => 'list'
  1120. )
  1121. );
  1122. }
  1123. }