. * * @package LibreNMS * @link http://librenms.org * @copyright 2018 Neil Lathwood * @copyright 2018 Tony Murray * @author Tony Murray */ header('Content-type: application/json'); if (!Auth::user()->hasGlobalAdmin()) { die(json_encode([ 'status' => 'error', 'message' => 'You need to be admin', ])); } if (empty($vars['template'])) { die(json_encode([ 'status' => 'error', 'message' => 'No template to convert', ])); } $new_body = ''; foreach (explode(PHP_EOL, $vars['template']) as $line) { $new_body .= convert_template($line) . PHP_EOL; } $new_title = convert_template($vars['title']); function convert_template($line) { if (str_contains($line, '{calc')) { return preg_replace( [ '/{calc[ ]*([\w\d\s\%\.\(\)\*\/\-\+\/]+)}/',// Replaces {calc (something*100)} '/%([\w\d]+)\.([\w\d]+)/',// Replaces %something.anything ], [ "@php\necho \\1;\n@endphp ", '$value[\'\2\']', ], $line ); } $old1 = $line; $find = [ '/{if %([\w=\s]+)}/',// Replaces {if %something == else} '/{else}/',// Replaces {else} '/{\/if}/',// Replaces {/if} '/{foreach %faults}/',// Replaces {foreach %faults} '/{foreach %contacts}/',// Replaces {foreach %contacts} '/{\/foreach}/',// Replaces {/foreach} '/{calc[ ]*([\w\d\s\%\.\(\)\*\/\-\+\/]+)}/',// Replaces {calc (something*100)} '/%value.string/',// Replaces %value.string '/%([\w\d]+)\.([\w\d]+)/',// Replaces %something.anything '/%([\w\d]+)/',// Replaces %anything ]; $replace = [ ' @if ($alert->\1) ', ' @else ', ' @endif ', ' @foreach ($alert->faults as $key => $value)', ' @foreach ($alert->contacts as $key => $value)', ' @endforeach ', " @php\necho \\1;\n@endphp ", '{{ $value[\'string\'] }}', '{{ $\1[\'\2\'] }}', '{{ $alert->\1 }}', ]; $old1 = preg_replace($find, $replace, $old1); // Revert some over-zealous changes: $find = [ '/\$alert->key/', '/\$alert->value/', ]; $replace = [ '$key', '$value', ]; return preg_replace($find, $replace, $old1); } die(json_encode([ 'status' => 'ok', 'message' => 'Template converted, review and save to update', 'template' => $new_body, 'title' => $new_title, ]));