option-functions.php 23 KB

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