option-functions.php 24 KB

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