4 * Description: Unit converter application
6 * Author: Mike Macgirvin <http://macgirvin.com/profile/mike>
10 use Friendica\Core\Hook;
12 function convert_install() {
13 Hook::register('app_menu', 'addon/convert/convert.php', 'convert_app_menu');
16 function convert_app_menu(array &$b)
18 $b['app_menu'][] = '<div class="app-title"><a href="convert">Units Conversion</a></div>';
22 function convert_module() {}
24 function convert_content() {
25 // @TODO UnitConverter uses a deprecated constructor with the class' name
26 // @TODO Let's one day rewrite this to a modern composer package
27 include 'UnitConvertor.php';
29 class TP_Converter extends UnitConvertor
31 public function __construct(string $lang = 'en')
41 parent::UnitConvertor($dec_point, $thousand_sep );
44 private function findBaseUnit($from, $to)
46 while (list($skey, $sval) = each($this->bases)) {
47 if ($skey == $from || $to == $skey || in_array($to, $sval) || in_array($from, $sval)) {
55 public function getTable(int $value, $from_unit, $to_unit, $precision): string
59 if ($base_unit = $this->findBaseUnit($from_unit, $to_unit)) {
60 // A baseunit was found now lets convert from -> $base_unit
61 $cell ['value'] = $this->convert($value, $from_unit, $base_unit, $precision) . ' ' . $base_unit;
62 $cell ['class'] = ($base_unit == $from_unit || $base_unit == $to_unit) ? 'framedred' : '';
65 // We now have the base unit and value now lets produce the table;
66 while (list($key, $val) = each($this->bases[$base_unit])) {
67 $cell ['value'] = $this->convert($value, $from_unit, $val, $precision) . ' ' . $val;
68 $cell ['class'] = ($val == $from_unit || $val == $to_unit) ? 'framedred' : '';
73 $string = "<table class=\"framed grayish\" border=\"1\" cellpadding=\"5\" width=\"80%\" align=\"center\"><tr>";
74 $string .= "<td rowspan=\"$cc\" align=\"center\">$value $from_unit</td>";
76 foreach ($cells as $cell) {
78 $string .= "<td class=\"" . $cell['class'] . "\">" . $cell['value'] . "</td>";
81 $string .= "</tr><tr><td class=\"" . $cell['class'] . "\">" . $cell['value'] . "</td>";
84 $string .= "</tr></table>";
91 $conv = new TP_Converter('en');
94 'Temperature' => ['base' => 'Celsius',
96 'Fahrenheit' => ['ratio' => 1.8, 'offset' => 32],
97 'Kelvin' => ['ratio' => 1, 'offset' => 273],
101 'Weight' => ['base' => 'kg',
109 'cwt(UK)' => 0.019684,
110 'cwt(US)' => 0.022046,
111 'ton (US)' => 0.0011023,
112 'ton (UK)' => 0.0009842
115 'Distance' => ['base' => 'km',
122 'naut.mile' => 0.53996,
126 'furlong' => 4.970969537898672,
127 'fathom' => 546.8066491688539
130 'Area' => ['base' => 'km 2',
134 'm 2' => pow(1000,2),
135 'dm 2' => pow(10000,2),
136 'cm 2' => pow(100000,2),
137 'mm 2' => pow(1000000,2),
138 'mile 2' => pow(0.62137,2),
139 'naut.miles 2' => pow(0.53996,2),
140 'in 2' => pow(39370,2),
141 'ft 2' => pow(3280.8,2),
142 'yd 2' => pow(1093.6,2),
145 'Volume' => ['base' => 'm 3',
154 'gal(US)' => 264.172,
155 'gal(UK)' => 219.969,
160 'tablespoon' => 67628.04,
161 'teaspoon' => 202884.1,
162 'pt (UK)' => 1000/0.56826,
163 'barrel petroleum' => 1000/158.99,
164 'Register Tons' => 2.832,
165 'Ocean Tons' => 1.1327
168 'Speed' => ['base' => 'kmph',
170 'mps' => 0.0001726031,
171 'milesph' => 0.62137,
173 'mach STP' => 0.0008380431,
174 'c (warp)' => 9.265669e-10
179 while (list($key, $val) = each($conversions)) {
180 $conv->addConversion($val['base'], $val['conv']);
181 $list[$key][] = $val['base'];
182 while (list($ukey, $uval) = each($val['conv'])) {
183 $list[$key][] = $ukey;
187 $o .= '<h3>Unit Conversions</h3>';
189 if (isset($_POST['from_unit']) && isset($_POST['value'])) {
190 $o .= ($conv->getTable(intval($_POST['value']), $_POST['from_unit'], $_POST['to_unit'], 5)) . '</p>';
192 $o .= '<p>Select:</p>';
195 if (isset($_POST['value'])) {
196 $value = $_POST['value'];
201 $o .= '<form action="convert" method="post" name="conversion">';
202 $o .= '<input name="value" type="text" id="value" value="' . $value . '" size="10" maxlength="10" />';
203 $o .= '<select name="from_unit" size="12">';
206 while(list($key, $val) = each($list)) {
207 $o .= "\n\t<optgroup label=\"$key\">";
208 while(list($ukey, $uval) = each($val)) {
209 $selected = (($uval == $_POST['from_unit']) ? ' selected="selected" ' : '');
210 $o .= "\n\t\t<option value=\"$uval\" $selected >$uval</option>";
212 $o .= "\n\t</optgroup>";
216 $o .= '<input type="submit" name="Submit" value="Submit" /></form>';