[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 <?php 2 3 // This file is part of Moodle - http://moodle.org/ 4 // 5 // Moodle is free software: you can redistribute it and/or modify 6 // it under the terms of the GNU General Public License as published by 7 // the Free Software Foundation, either version 3 of the License, or 8 // (at your option) any later version. 9 // 10 // Moodle is distributed in the hope that it will be useful, 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 // GNU General Public License for more details. 14 // 15 // You should have received a copy of the GNU General Public License 16 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 17 18 /** 19 * @package core 20 * @subpackage lib 21 * @copyright Petr Skoda (skodak) 22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 */ 24 25 defined('MOODLE_INTERNAL') || die(); 26 27 /** @see evalmath/evalmath.class.php */ 28 require_once $CFG->dirroot.'/lib/evalmath/evalmath.class.php'; 29 30 /** 31 * This class abstracts evaluation of spreadsheet formulas. 32 * See unit tests in lib/tests/mathslib_test.php for sample usage. 33 * 34 * @package moodlecore 35 * @copyright Petr Skoda (skodak) 36 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 37 */ 38 class calc_formula { 39 40 // private properties 41 var $_em; 42 var $_nfx = false; // postfix notation 43 var $_error = false; // last error 44 45 /** 46 * Constructor for spreadsheet formula with optional parameters 47 * 48 * @param string $formula with leading = 49 * @param array $params associative array of parameters used in formula. All parameter names must be lowercase! 50 */ 51 public function __construct($formula, $params=false) { 52 $this->_em = new EvalMath(); 53 $this->_em->suppress_errors = true; // no PHP errors! 54 if (strpos($formula, '=') !== 0) { 55 $this->_error = "missing leading '='"; 56 return; 57 } 58 $formula = substr($formula, 1); 59 if (strpos($formula, '=') !== false) { 60 $this->_error = "too many '='"; 61 return; 62 } 63 $this->_nfx = $this->_em->nfx($formula); 64 if ($this->_nfx == false) { 65 $this->_error = $this->_em->last_error; 66 return; 67 } 68 if ($params != false) { 69 $this->set_params($params); 70 } 71 } 72 73 /** 74 * Old syntax of class constructor. Deprecated in PHP7. 75 * 76 * @deprecated since Moodle 3.1 77 */ 78 public function calc_formula($formula, $params=false) { 79 debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER); 80 self::__construct($formula, $params); 81 } 82 83 /** 84 * Raplace parameters used in existing formula, 85 * parameter names must contain only lowercase [a-z] letters, no other characters are allowed! 86 * 87 * @param array $params associative array of parameters used in formula 88 */ 89 function set_params($params) { 90 $this->_em->v = $params; 91 } 92 93 /** 94 * Evaluate formula 95 * 96 * @return mixed number if ok, false if error 97 */ 98 function evaluate() { 99 if ($this->_nfx == false) { 100 return false; 101 } 102 $res = $this->_em->pfx($this->_nfx); 103 if ($res === false) { 104 $this->_error = $this->_em->last_error; 105 return false; 106 } else { 107 $this->_error = false; 108 return $res; 109 } 110 } 111 112 /** 113 * Get last error. 114 * TODO: localize the strings from contructor and EvalMath library 115 * 116 * @return mixed string with last error description or false if ok 117 */ 118 function get_error() { 119 return $this->_error; 120 } 121 122 /** 123 * Similar to format_float, formats the numbers and list separators 124 * according to locale specifics. 125 * @param string $formula 126 * @return string localised formula 127 */ 128 public static function localize($formula) { 129 $formula = str_replace('.', '$', $formula); // temp placeholder 130 $formula = str_replace(',', get_string('listsep', 'langconfig'), $formula); 131 $formula = str_replace('$', get_string('decsep', 'langconfig'), $formula); 132 return $formula; 133 } 134 135 /** 136 * Similar to unformat_float, converts floats and lists to PHP standards. 137 * @param string $formula localised formula 138 * @return string 139 */ 140 public static function unlocalize($formula) { 141 $formula = str_replace(get_string('decsep', 'langconfig'), '$', $formula); 142 $formula = str_replace(get_string('listsep', 'langconfig'), ',', $formula); 143 $formula = str_replace('$', '.', $formula); // temp placeholder 144 return $formula; 145 } 146 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Thu Aug 11 10:00:09 2016 | Cross-referenced by PHPXref 0.7.1 |