@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.)
hq.recaptime.dev/wiki/Phorge
phorge
phabricator
1<?php
2
3final class PhabricatorSystemSelectEncodingController
4 extends PhabricatorController {
5
6 public function shouldRequireLogin() {
7 return false;
8 }
9
10 public function processRequest() {
11 $request = $this->getRequest();
12
13 if (!function_exists('mb_list_encodings')) {
14 return $this->newDialog()
15 ->setTitle(pht('No Encoding Support'))
16 ->appendParagraph(
17 pht(
18 'This system does not have the "%s" extension installed, '.
19 'so character encodings are not supported. Install "%s" to '.
20 'enable support.',
21 'mbstring',
22 'mbstring'))
23 ->addCancelButton('/');
24 }
25
26 if ($request->isFormPost()) {
27 $result = array('encoding' => $request->getStr('encoding'));
28 return id(new AphrontAjaxResponse())->setContent($result);
29 }
30
31 $encodings = mb_list_encodings();
32 $encodings = array_fuse($encodings);
33 asort($encodings);
34 unset($encodings['pass']);
35 unset($encodings['auto']);
36
37 $encodings = array(
38 '' => pht('(Use Default)'),
39 ) + $encodings;
40
41 $form = id(new AphrontFormView())
42 ->setUser($this->getRequest()->getUser())
43 ->appendRemarkupInstructions(pht('Choose a text encoding to use.'))
44 ->appendChild(
45 id(new AphrontFormSelectControl())
46 ->setLabel(pht('Encoding'))
47 ->setName('encoding')
48 ->setValue($request->getStr('encoding'))
49 ->setOptions($encodings));
50
51 return $this->newDialog()
52 ->setTitle(pht('Select Character Encoding'))
53 ->appendChild($form->buildLayoutView())
54 ->addSubmitButton(pht('Choose Encoding'))
55 ->addCancelButton('/');
56 }
57}