From 3040cdc818fcebcd2baefe4e59bf75b3fdca6ef1 Mon Sep 17 00:00:00 2001 From: Michael Walker Date: Mon, 19 May 2014 04:16:02 +0100 Subject: [PATCH] Move rolling into an event handler --- inc/functions.php | 62 +++++++++++++++++++++++++++++++++++++++++++++++ post.php | 56 ------------------------------------------ 2 files changed, 62 insertions(+), 56 deletions(-) diff --git a/inc/functions.php b/inc/functions.php index db9c91b0..2c599ec5 100644 --- a/inc/functions.php +++ b/inc/functions.php @@ -240,6 +240,10 @@ function loadConfig() { event_handler('post', 'postHandler'); } + if ($config['allow_roll']) { + event_handler('post', 'diceRoller'); + } + event('load-config'); if ($config['debug']) { @@ -2298,3 +2302,61 @@ function shell_exec_error($command, $suppress_stdout = false) { return $return === 'TB_SUCCESS' ? false : $return; } + +/* Die rolling: + * If "dice XdY+/-Z" is in the email field (where X or +/-Z may be + * missing), X Y-sided dice are rolled and summed, with the modifier Z + * added on. The result is displayed at the top of the post. + */ +function diceRoller($post) { + if(strpos(strtolower($post->email), 'dice%20') === 0) { + $dicestr = str_split(substr($post->email, strlen('dice%20'))); + + // Get params + $diceX = ''; + $diceY = ''; + $diceZ = ''; + + $curd = 'diceX'; + for($i = 0; $i < count($dicestr); $i ++) { + if(is_numeric($dicestr[$i])) { + $$curd .= $dicestr[$i]; + } else if($dicestr[$i] == 'd') { + $curd = 'diceY'; + } else if($dicestr[$i] == '-' || $dicestr[$i] == '+') { + $curd = 'diceZ'; + $$curd = $dicestr[$i]; + } + } + + // Default values for X and Z + if($diceX == '') { + $diceX = '1'; + } + + if($diceZ == '') { + $diceZ = '+0'; + } + + // Intify them + $diceX = intval($diceX); + $diceY = intval($diceY); + $diceZ = intval($diceZ); + + // Continue only if we have valid values + if($diceX > 0 && $diceY > 0) { + $dicerolls = array(); + $dicesum = $diceZ; + for($i = 0; $i < $diceX; $i++) { + $roll = rand(1, $diceY); + $dicerolls[] = $roll; + $dicesum += $roll; + } + + // Prepend the result to the post body + $modifier = ($diceZ != 0) ? ((($diceZ < 0) ? ' - ' : ' + ') . abs($diceZ)) : ''; + $dicesum = ($diceX > 1) ? ' = ' . $dicesum : ''; + $post->body = 'Rolled ' . implode(', ', $dicerolls) . $modifier . $dicesum . '
' . $post->body; + } + } +} diff --git a/post.php b/post.php index 574de077..d1c2b086 100644 --- a/post.php +++ b/post.php @@ -482,62 +482,6 @@ if (isset($_POST['delete'])) { wordfilters($post['body']); $post['body'] = escape_markup_modifiers($post['body']); - - /* Die rolling: - * If "dice XdY+/-Z" is in the email field (where X or +/-Z may be missing), - * X Y-sided dice are rolled and summed, with the modifier Z added on. - * The result is displayed at the top of the post. - */ - if($config['allow_roll'] && strpos(strtolower($post['email']), 'dice%20') === 0) { - $dicestr = str_split(substr($post['email'], strlen('dice%20'))); - - // Get params - $diceX = ''; - $diceY = ''; - $diceZ = ''; - - $curd = 'diceX'; - for($i = 0; $i < count($dicestr); $i ++) { - if(is_numeric($dicestr[$i])) { - $$curd .= $dicestr[$i]; - } else if($dicestr[$i] == 'd') { - $curd = 'diceY'; - } else if($dicestr[$i] == '-' || $dicestr[$i] == '+') { - $curd = 'diceZ'; - $$curd = $dicestr[$i]; - } - } - - // Default values for X and Z - if($diceX == '') { - $diceX = '1'; - } - - if($diceZ == '') { - $diceZ = '+0'; - } - - // Intify them - $diceX = intval($diceX); - $diceY = intval($diceY); - $diceZ = intval($diceZ); - - // Continue only if we have valid values - if($diceX > 0 && $diceY > 0) { - $dicerolls = array(); - $dicesum = $diceZ; - for($i = 0; $i < $diceX; $i++) { - $roll = rand(1, $diceY); - $dicerolls[] = $roll; - $dicesum += $roll; - } - - // Prepend the result to the post body - $modifier = ($diceZ != 0) ? ((($diceZ < 0) ? ' - ' : ' + ') . abs($diceZ)) : ''; - $dicesum = ($diceX > 1) ? ' = ' . $dicesum : ''; - $post['body'] = 'Rolled ' . implode(', ', $dicerolls) . $modifier . $dicesum . "\r\n" . $post['body']; - } - } if ($mod && isset($post['raw']) && $post['raw']) { $post['body'] .= "\n1";