<?php /** * Name: Converter App * Description: Unit converter application * Version: 1.0 * Author: Mike Macgirvin <http://macgirvin.com/profile/mike> */ use Friendica\Core\Addon; function convert_install() { Addon::registerHook('app_menu', 'addon/convert/convert.php', 'convert_app_menu'); } function convert_uninstall() { Addon::unregisterHook('app_menu', 'addon/convert/convert.php', 'convert_app_menu'); } function convert_app_menu($a,&$b) { $b['app_menu'][] = '<div class="app-title"><a href="convert">Units Conversion</a></div>'; } function convert_module() {} function convert_content($app) { include("UnitConvertor.php"); class TP_Converter extends UnitConvertor { function TP_Converter($lang = "en") { if ($lang != 'en' ) { $dec_point = '.'; $thousand_sep = "'"; } else { $dec_point = '.'; $thousand_sep = ","; } $this->UnitConvertor($dec_point , $thousand_sep ); } // end func UnitConvertor function find_base_unit($from,$to) { while (list($skey,$sval) = each($this->bases)) { if ($skey == $from || $to == $skey || in_array($to,$sval) || in_array($from,$sval)) { return $skey; } } return false; } function getTable($value, $from_unit, $to_unit, $precision) { if ($base_unit = $this->find_base_unit($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; while (list($key,$val) = each($this->bases[$base_unit])) { $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 = "<table class=\"framed grayish\" border=\"1\" cellpadding=\"5\" width=\"80%\" align=\"center\"><tr>"; $string .= "<td rowspan=\"$cc\" align=\"center\">$value $from_unit</td>"; $i=0; foreach ($cells as $cell) { if ($i==0) { $string .= "<td class=\"".$cell['class']."\">".$cell['value']."</td>"; $i++; } else { $string .= "</tr><tr><td class=\"".$cell['class']."\">".$cell['value']."</td>"; } } $string .= "</tr></table>"; return $string; } } } $conv = new TP_Converter('en'); $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 ] ] ]; while (list($key,$val) = each($conversions)) { $conv->addConversion($val['base'], $val['conv']); $list[$key][] = $val['base']; while (list($ukey,$uval) = each($val['conv'])) { $list[$key][] = $ukey; } } $o .= '<h3>Unit Conversions</h3>'; if (isset($_POST['from_unit']) && isset($_POST['value'])) { $_POST['value'] = $_POST['value'] + 0; $o .= ($conv->getTable($_POST['value'], $_POST['from_unit'], $_POST['to_unit'], 5))."</p>"; } else { $o .= "<p>Select:</p>"; } if(isset($_POST['value'])) $value = $_POST['value']; else $value = ''; $o .= '<form action="convert" method="post" name="conversion">'; $o .= '<input name="value" type="text" id="value" value="' . $value . '" size="10" maxlength="10" />'; $o .= '<select name="from_unit" size="12">'; reset($list); while(list($key,$val) = each($list)) { $o .= "\n\t<optgroup label=\"$key\">"; while(list($ukey,$uval) = each($val)) { $selected = (($uval == $_POST['from_unit']) ? ' selected="selected" ' : ''); $o .= "\n\t\t<option value=\"$uval\" $selected >$uval</option>"; } $o .= "\n\t</optgroup>"; } $o .= '</select>'; $o .= '<input type="submit" name="Submit" value="Submit" /></form>'; return $o; }