diff --git a/src/structure/components/com_sportsmanager/mathparser.php b/src/structure/components/com_sportsmanager/mathparser.php
index 0d3f524..a079639 100644
--- a/src/structure/components/com_sportsmanager/mathparser.php
+++ b/src/structure/components/com_sportsmanager/mathparser.php
@@ -209,10 +209,10 @@ class MathParser
/**
* Public for performance reasons.
* @see getVariableResolver function for more info.
- * @var string
+ * @var string|null
* @since 1.0.0
*/
- public string $VariableResolver;
+ public ?string $VariableResolver = null;
/**
* @ignore
@@ -325,10 +325,10 @@ class MathParser
* the problem domain is too big to define the variables ahead of time. In such cases, it makes sense
* to parse with the assumption that it is a valid variable and resolve it's value when needed on demand during
* evaluation.
- * @return string
+ * @return string|null
* @since 1.0.0
*/
- public function getVariableResolver(): string
+ public function getVariableResolver(): ?string
{
return $this->VariableResolver;
}
@@ -493,7 +493,7 @@ class MathParser
throw new Exception($this->getMessage1("NtVarNm", $varName));
}
//create the variable:
- $var = new Mathparser_Variable($upcName, $newVal, $fn_valueProvider);
+ $var = new Mathparser_Variable($this, $upcName, $newVal, $fn_valueProvider);
$this->Variables[$upcName] = $var;
$this->Dirty = true;
}
@@ -1824,6 +1824,12 @@ class MathParser
class Mathparser_Variable
{
+ /**
+ * The parent parser instance, used to call the VariableResolver if needed.
+ * @since 1.0.0
+ */
+ private $Parser;
+
/**
* Name of this variable.
* @since 1.0.0
@@ -1843,10 +1849,21 @@ class Mathparser_Variable
*
function VariableResolver($parser, $varName);
* @since 1.0.0
*/
- public string $ValueProvider;
+ public $ValueProvider;
- public function __construct($aName, $newVal, $valueProvider)
+ /**
+ * If the $this->ValueProvider is set, then this method uses it to get the runtime value.
+ * Otherwise, this method returns the value of $this->Value;
+ * @since 1.0.0
+ * @noinspection PhpUnused
+ */
+ public function getRuntimeValue(){
+ return !is_callable($this->ValueProvider) ? $this->Value : ($this->ValueProvider)($this->Parser, $this->Name);
+ }
+
+ public function __construct($parser, $aName, $newVal, $valueProvider)
{
+ $this->Parser = $parser;
$this->Name = $aName;
$this->Value = $newVal;
$this->ValueProvider = $valueProvider;
diff --git a/src/structure/components/com_sportsmanager/tools.php b/src/structure/components/com_sportsmanager/tools.php
index 59992be..9d1451f 100644
--- a/src/structure/components/com_sportsmanager/tools.php
+++ b/src/structure/components/com_sportsmanager/tools.php
@@ -18,6 +18,16 @@ defined('_JEXEC') or die('Restricted access');
require_once JPATH_SITE . '/components/com_sportsmanager/mathparser.php';
require_once JPATH_SITE . '/components/com_sportsmanager/database/init.php';
+/** @noinspection PhpUnused */
+function mathParserVerteilung($rohpunkte, $platz, $teilnehmer, $multiplikator) {
+ return max(round($multiplikator * round(((($rohpunkte - 1) * (-log($platz / $teilnehmer) * (1 - ($platz / $teilnehmer)))) / (-log(1 / $teilnehmer) * (1 - (1 / $teilnehmer)))) + 1)), 1);
+}
+
+/** @noinspection PhpUnused */
+function mathParserVerteilungR($rohpunkte, $platz, $teilnehmer, $multiplikator) {
+ return max(round(((($multiplikator * $rohpunkte - 1) * (-log($platz / $teilnehmer) * (1 - ($platz / $teilnehmer)))) / (-log(1 / $teilnehmer) * (1 - (1 / $teilnehmer)))) + 1), 1);
+}
+
class MathParserSM extends MathParser
{
// Verteilung nach Klostermann/Wahle