*/ use Friendica\Core\Hook; function convert_install() { Hook::register('app_menu', 'addon/convert/convert.php', 'convert_app_menu'); } function convert_app_menu(array &$b) { $b['app_menu'][] = '
Units Conversion
'; } function convert_module() {} function convert_content() { // @TODO UnitConverter uses a deprecated constructor with the class' name // @TODO Let's one day rewrite this to a modern composer package include 'UnitConvertor.php'; $conv = new class('en') extends UnitConvertor { public function __construct(string $lang = 'en') { if ($lang == 'en' ) { $dec_point = '.'; $thousand_sep = ','; } else { $dec_point = '.'; $thousand_sep = "'"; } parent::UnitConvertor($dec_point, $thousand_sep ); } private function findBaseUnit($from, $to) { foreach ($this->bases as $skey => $sval) { if ($skey == $from || $to == $skey || in_array($to, $sval) || in_array($from, $sval)) { return $skey; } } return false; } public function getTable(int $value, $from_unit, $to_unit, $precision): string { $string = ''; if ($base_unit = $this->findBaseUnit($from_unit, $to_unit)) { // A baseunit was found now lets convert from -> $base_unit $cell ['value'] = $this->convert($value, $from_unit, $base_unit, $precision) . ' ' . $base_unit; $cell ['class'] = ($base_unit == $from_unit || $base_unit == $to_unit) ? 'framedred' : ''; $cells[] = $cell; // We now have the base unit and value now lets produce the table; foreach ($this->bases[$base_unit] as $val) { $cell ['value'] = $this->convert($value, $from_unit, $val, $precision) . ' ' . $val; $cell ['class'] = ($val == $from_unit || $val == $to_unit) ? 'framedred' : ''; $cells[] = $cell; } $cc = count($cells); $string = ""; $string .= ""; $i = 0; foreach ($cells as $cell) { if ($i == 0) { $string .= ""; $i++; } else { $string .= ""; } } $string .= "
$value $from_unit" . $cell['value'] . "
" . $cell['value'] . "
"; } return $string; } }; $conversions = [ 'Temperature' => ['base' => 'Celsius', 'conv' => [ 'Fahrenheit' => ['ratio' => 1.8, 'offset' => 32], 'Kelvin' => ['ratio' => 1, 'offset' => 273], 'Reaumur' => 0.8 ] ], 'Weight' => ['base' => 'kg', 'conv' => [ 'g' => 1000, 'mg' => 1000000, 't' => 0.001, 'grain' => 15432, 'oz' => 35.274, 'lb' => 2.2046, 'cwt(UK)' => 0.019684, 'cwt(US)' => 0.022046, 'ton (US)' => 0.0011023, 'ton (UK)' => 0.0009842 ] ], 'Distance' => ['base' => 'km', 'conv' => [ 'm' => 1000, 'dm' => 10000, 'cm' => 100000, 'mm' => 1000000, 'mile' => 0.62137, 'naut.mile' => 0.53996, 'inch(es)' => 39370, 'ft' => 3280.8, 'yd' => 1093.6, 'furlong' => 4.970969537898672, 'fathom' => 546.8066491688539 ] ], 'Area' => ['base' => 'km 2', 'conv' => [ 'ha' => 100, 'acre' => 247.105, 'm 2' => pow(1000,2), 'dm 2' => pow(10000,2), 'cm 2' => pow(100000,2), 'mm 2' => pow(1000000,2), 'mile 2' => pow(0.62137,2), 'naut.miles 2' => pow(0.53996,2), 'in 2' => pow(39370,2), 'ft 2' => pow(3280.8,2), 'yd 2' => pow(1093.6,2), ] ], 'Volume' => ['base' => 'm 3', 'conv' => [ 'in 3' => 61023.6, 'ft 3' => 35.315, 'cm 3' => pow(10,6), 'dm 3' => 1000, 'litre' => 1000, 'hl' => 10, 'yd 3' => 1.30795, 'gal(US)' => 264.172, 'gal(UK)' => 219.969, 'pint' => 2113.376, 'quart' => 1056.688, 'cup' => 4266.753, 'fl oz' => 33814.02, 'tablespoon' => 67628.04, 'teaspoon' => 202884.1, 'pt (UK)' => 1000/0.56826, 'barrel petroleum' => 1000/158.99, 'Register Tons' => 2.832, 'Ocean Tons' => 1.1327 ] ], 'Speed' => ['base' => 'kmph', 'conv' => [ 'mps' => 0.0001726031, 'milesph' => 0.62137, 'knots' => 0.53996, 'mach STP' => 0.0008380431, 'c (warp)' => 9.265669e-10 ] ] ]; foreach ($conversions as $key => $val) { $conv->addConversion($val['base'], $val['conv']); $list[$key][] = $val['base']; foreach ($val['conv'] as $ukey => $uval) { $list[$key][] = $ukey; } } $o = '

Unit Conversions

'; if (isset($_POST['from_unit']) && isset($_POST['value'])) { $o .= ($conv->getTable(intval($_POST['value']), $_POST['from_unit'], $_POST['to_unit'], 5)) . '

'; } else { $o .= '

Select:

'; } if (isset($_POST['value'])) { $value = $_POST['value']; } else { $value = ''; } $o .= '
'; $o .= ''; $o .= ''; $o .= '
'; return $o; }