mirror of
https://github.com/PHPOffice/PhpSpreadsheet.git
synced 2026-08-25 17:58:20 +00:00
ecbd702628
Phpstan hasn't identified any errors in Samples in a long time. But, as it turns out, one particular error is suppressed: ``` Variable $helper might not be defined. ``` This error would be generated by almost all samples, and the errors that it suppresses will become problematic if we move to Level 10. We are not yet committed to doing that, but it is pretty easy to write a script to change the samples so that error no longer happens, and there isn't really any reason to delay doing so. The results of that script constitute this PR.
100 lines
4.0 KiB
PHP
100 lines
4.0 KiB
PHP
<?php
|
|
|
|
use PhpOffice\PhpSpreadsheet\Calculation\Engineering\ConvertUOM;
|
|
use PhpOffice\PhpSpreadsheet\Helper\Sample;
|
|
use PhpOffice\PhpSpreadsheet\Settings;
|
|
use PhpOffice\PhpSpreadsheet\Shared\StringHelper;
|
|
|
|
require __DIR__ . '/../Header.php';
|
|
/** @var Sample $helper */
|
|
$helper = new Sample();
|
|
if ($helper->isCli()) {
|
|
$helper->log('This example should only be run from a Web Browser' . PHP_EOL);
|
|
|
|
return;
|
|
}
|
|
$post = [];
|
|
foreach (['category', 'quantity', 'fromUnit', 'toUnit'] as $value) {
|
|
if (isset($_POST[$value])) {
|
|
$post[$value] = StringHelper::convertToString($_POST[$value]);
|
|
}
|
|
}
|
|
$categories = ConvertUOM::getConversionCategories();
|
|
$defaultCategory = $post['category'] ?? $categories[0];
|
|
$units = [];
|
|
foreach ($categories as $category) {
|
|
$categoryUnits = ConvertUOM::getConversionCategoryUnitDetails($category)[$category];
|
|
$categoryUnits = array_unique(
|
|
array_combine(
|
|
array_column($categoryUnits, 'unit'),
|
|
array_column($categoryUnits, 'description')
|
|
)
|
|
);
|
|
$units[$category] = $categoryUnits;
|
|
}
|
|
|
|
?>
|
|
<form action=Convert-Online.php method="POST">
|
|
<div class="mb-3 row">
|
|
<label for="category" class="col-sm-2 col-form-label">Category</label>
|
|
<div class="col-sm-10">
|
|
<select name="category" class="form-select" onchange="this.form.submit()">
|
|
<?php foreach ($categories as $category) {
|
|
echo "<option value=\"{$category}\" " . ((isset($post['category']) && $post['category'] === $category) ? 'selected' : '') . ">{$category}</option>", PHP_EOL;
|
|
} ?>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="mb-3 row">
|
|
<label for="quantity" class="col-sm-2 col-form-label">Quantity</label>
|
|
<div class="col-sm-10">
|
|
<input name="quantity" type="text" size="8" value="<?php echo (isset($post['quantity'])) ? htmlentities($post['quantity'], Settings::htmlEntityFlags()) : '1.0'; ?>">
|
|
</div>
|
|
</div>
|
|
<div class="mb-3 row">
|
|
<label for="fromUnit" class="col-sm-2 col-form-label">From Unit</label>
|
|
<div class="col-sm-10">
|
|
<select name="fromUnit" class="form-select">
|
|
<?php foreach ($units[$defaultCategory] as $fromUnitCode => $fromUnitName) {
|
|
echo "<option value=\"{$fromUnitCode}\" " . ((isset($post['fromUnit']) && $post['fromUnit'] === $fromUnitCode) ? 'selected' : '') . ">{$fromUnitName}</option>", PHP_EOL;
|
|
} ?>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="mb-3 row">
|
|
<label for="toUnit" class="col-sm-2 col-form-label">To Unit</label>
|
|
<div class="col-sm-10">
|
|
<select name="toUnit" class="form-select">
|
|
<?php foreach ($units[$defaultCategory] as $toUnitCode => $toUnitName) {
|
|
echo "<option value=\"{$toUnitCode}\" " . ((isset($post['toUnit']) && $post['toUnit'] === $toUnitCode) ? 'selected' : '') . ">{$toUnitName}</option>", PHP_EOL;
|
|
} ?>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="mb-3 row">
|
|
<div class="col-sm-10">
|
|
<input class="btn btn-primary" name="submitx" type="submit" value="Convert"><br />
|
|
</div>
|
|
</div>
|
|
</form>
|
|
|
|
<?php
|
|
/** If the user has submitted the form, then we need to calculate the value and display the result */
|
|
if (isset($post['quantity'], $post['fromUnit'], $post['toUnit'])) {
|
|
$quantity = $post['quantity'];
|
|
$fromUnit = $post['fromUnit'];
|
|
$toUnit = $post['toUnit'];
|
|
if (!is_numeric($quantity)) {
|
|
$helper->log('Quantity is not numeric');
|
|
} elseif (isset($units[$post['category']][$fromUnit], $units[$post['category']][$toUnit])) {
|
|
/** @var float|string */
|
|
$result = ConvertUOM::CONVERT($quantity, $fromUnit, $toUnit);
|
|
|
|
$helper->log("{$quantity} {$units[$post['category']][$fromUnit]} is {$result} {$units[$post['category']][$toUnit]}");
|
|
} else {
|
|
$helper->log('Please enter quantity and select From Unit and To Unit');
|
|
}
|
|
} else {
|
|
$helper->log('Please enter quantity and select From Unit and To Unit');
|
|
}
|