137748cd8SNickeau<?php 237748cd8SNickeau/** 337748cd8SNickeau * Copyright (c) 2020. ComboStrap, Inc. and its affiliates. All Rights Reserved. 437748cd8SNickeau * 537748cd8SNickeau * This source code is licensed under the GPL license found in the 637748cd8SNickeau * COPYING file in the root directory of this source tree. 737748cd8SNickeau * 837748cd8SNickeau * @license GPL 3 (https://www.gnu.org/licenses/gpl-3.0.en.html) 937748cd8SNickeau * @author ComboStrap <support@combostrap.com> 1037748cd8SNickeau * 1137748cd8SNickeau */ 1237748cd8SNickeau 1337748cd8SNickeaunamespace ComboStrap; 1437748cd8SNickeau 1537748cd8SNickeau/** 1637748cd8SNickeau * Class PipelineUtility 1737748cd8SNickeau * @package ComboStrap 1837748cd8SNickeau * A pipeline to perform filter transformation 1937748cd8SNickeau * 2037748cd8SNickeau * See also 2137748cd8SNickeau * https://getbootstrap.com/docs/5.0/helpers/text-truncation/ 2237748cd8SNickeau */ 2337748cd8SNickeauclass PipelineUtility 2437748cd8SNickeau{ 2537748cd8SNickeau 2637748cd8SNickeau /** 2737748cd8SNickeau * @param $input 2837748cd8SNickeau * @return string 2937748cd8SNickeau */ 3037748cd8SNickeau static public function execute($input) 3137748cd8SNickeau { 3237748cd8SNickeau 3337748cd8SNickeau /** 3437748cd8SNickeau * Get the value 3537748cd8SNickeau */ 3637748cd8SNickeau $firstQuoteChar = strpos($input, '"'); 3737748cd8SNickeau $input = substr($input, $firstQuoteChar + 1); 3837748cd8SNickeau $secondQuoteChar = strpos($input, '"'); 3937748cd8SNickeau $value = substr($input, 0, $secondQuoteChar); 4037748cd8SNickeau $input = substr($input, $secondQuoteChar + 1); 4137748cd8SNickeau 4237748cd8SNickeau /** 4337748cd8SNickeau * Go to the first | and delete it from the input 4437748cd8SNickeau */ 4537748cd8SNickeau $pipeChar = strpos($input, '|'); 4637748cd8SNickeau $input = substr($input, $pipeChar + 1); 4737748cd8SNickeau 4837748cd8SNickeau /** 4937748cd8SNickeau * Get the command and applies them 5037748cd8SNickeau */ 5137748cd8SNickeau $commands = preg_split("/\|/", $input); 5237748cd8SNickeau foreach ($commands as $command) { 5337748cd8SNickeau $command = trim($command, " )"); 5437748cd8SNickeau $leftParenthesis = strpos($command, "("); 5537748cd8SNickeau $commandName = substr($command, 0, $leftParenthesis); 5637748cd8SNickeau $signature = substr($command, $leftParenthesis + 1); 5737748cd8SNickeau $commandArgs = preg_split("/,/", $signature); 5837748cd8SNickeau $commandArgs = array_map( 5937748cd8SNickeau 'trim', 6037748cd8SNickeau $commandArgs, 6137748cd8SNickeau array_fill(0, sizeof($commandArgs), "\"") 6237748cd8SNickeau ); 6337748cd8SNickeau $commandName = trim($commandName); 6437748cd8SNickeau if (!empty($commandName)) { 6537748cd8SNickeau switch ($commandName) { 6637748cd8SNickeau case "replace": 6737748cd8SNickeau $value = self::replace($commandArgs, $value); 6837748cd8SNickeau break; 6937748cd8SNickeau case "head": 7037748cd8SNickeau $value = self::head($commandArgs, $value); 7137748cd8SNickeau break; 7237748cd8SNickeau case "tail": 7337748cd8SNickeau $value = self::tail($commandArgs, $value); 7437748cd8SNickeau break; 7537748cd8SNickeau case "rconcat": 7637748cd8SNickeau $value = self::concat($commandArgs, $value, "right"); 7737748cd8SNickeau break; 7837748cd8SNickeau case "lconcat": 7937748cd8SNickeau $value = self::concat($commandArgs, $value, "left"); 8037748cd8SNickeau break; 8137748cd8SNickeau case "cut": 8237748cd8SNickeau $value = self::cut($commandArgs, $value); 8337748cd8SNickeau break; 8437748cd8SNickeau case "trim": 8537748cd8SNickeau $value = trim($value); 8637748cd8SNickeau break; 8737748cd8SNickeau case "capitalize": 8837748cd8SNickeau $value = ucwords($value); 8937748cd8SNickeau break; 9037748cd8SNickeau default: 9137748cd8SNickeau LogUtility::msg("command ($commandName) is unknown", LogUtility::LVL_MSG_ERROR, "pipeline"); 9237748cd8SNickeau } 9337748cd8SNickeau } 9437748cd8SNickeau } 9537748cd8SNickeau return $value; 9637748cd8SNickeau } 9737748cd8SNickeau 9837748cd8SNickeau private static function replace(array $commandArgs, $value) 9937748cd8SNickeau { 10037748cd8SNickeau $search = $commandArgs[0]; 10137748cd8SNickeau $replace = $commandArgs[1]; 10237748cd8SNickeau return str_replace($search, $replace, $value); 10337748cd8SNickeau } 10437748cd8SNickeau 10537748cd8SNickeau /** 10637748cd8SNickeau * @param array $commandArgs 10737748cd8SNickeau * @param $value 10837748cd8SNickeau * @return false|string 10937748cd8SNickeau * See also: https://getbootstrap.com/docs/5.0/helpers/text-truncation/ 11037748cd8SNickeau */ 11137748cd8SNickeau private static function head(array $commandArgs, $value) 11237748cd8SNickeau { 11337748cd8SNickeau $length = $commandArgs[0]; 114*4cadd4f8SNickeau if (strlen($value) < $length) { 115*4cadd4f8SNickeau return $value; 116*4cadd4f8SNickeau } 117*4cadd4f8SNickeau $headValue = substr($value, 0, $length); 118*4cadd4f8SNickeau $tail = $commandArgs[1]; 119*4cadd4f8SNickeau if ($tail !== null) { 120*4cadd4f8SNickeau $headValue .= $tail; 121*4cadd4f8SNickeau } 122*4cadd4f8SNickeau return $headValue; 12337748cd8SNickeau } 12437748cd8SNickeau 12537748cd8SNickeau private static function concat(array $commandArgs, $value, $side) 12637748cd8SNickeau { 12737748cd8SNickeau $string = $commandArgs[0]; 12837748cd8SNickeau switch ($side) { 12937748cd8SNickeau case "left": 13037748cd8SNickeau return $string . $value; 13137748cd8SNickeau case "right": 13237748cd8SNickeau return $value . $string; 13337748cd8SNickeau default: 13437748cd8SNickeau LogUtility::msg("The side value ($side) is unknown", LogUtility::LVL_MSG_ERROR, "pipeline"); 13537748cd8SNickeau } 13637748cd8SNickeau 13737748cd8SNickeau 13837748cd8SNickeau } 13937748cd8SNickeau 14037748cd8SNickeau private static function tail(array $commandArgs, $value) 14137748cd8SNickeau { 14237748cd8SNickeau $length = $commandArgs[0]; 14337748cd8SNickeau return substr($value, strlen($value) - $length); 14437748cd8SNickeau } 14537748cd8SNickeau 14637748cd8SNickeau private static function cut(array $commandArgs, $value) 14737748cd8SNickeau { 14837748cd8SNickeau $pattern = $commandArgs[0]; 14937748cd8SNickeau $words = preg_split("/$pattern/i", $value); 15037748cd8SNickeau if ($words !== false) { 15137748cd8SNickeau $selector = $commandArgs[1]; 15237748cd8SNickeau $startEndSelector = preg_split("/-/i", $selector); 15337748cd8SNickeau $start = $startEndSelector[0] - 1; 15437748cd8SNickeau $end = null; 15537748cd8SNickeau if (isset($startEndSelector[1])) { 15637748cd8SNickeau $end = $startEndSelector[1]; 15737748cd8SNickeau if (empty($end)) { 15837748cd8SNickeau $end = sizeof($words); 15937748cd8SNickeau } 16037748cd8SNickeau $end = $end - 1; 16137748cd8SNickeau } 16237748cd8SNickeau if ($end == null) { 16337748cd8SNickeau if (isset($words[$start])) { 16437748cd8SNickeau return $words[$start]; 16537748cd8SNickeau } else { 16637748cd8SNickeau return $value; 16737748cd8SNickeau } 16837748cd8SNickeau } else { 16937748cd8SNickeau $result = ""; 17037748cd8SNickeau for ($i = $start; $i <= $end; $i++) { 17137748cd8SNickeau if (isset($words[$i])) { 17237748cd8SNickeau if (!empty($result)) { 17337748cd8SNickeau $result .= $pattern; 17437748cd8SNickeau } 17537748cd8SNickeau $result .= $words[$i]; 17637748cd8SNickeau } 17737748cd8SNickeau } 17837748cd8SNickeau return $result; 17937748cd8SNickeau } 18037748cd8SNickeau 18137748cd8SNickeau } else { 18237748cd8SNickeau return "An error occurred: could not split with the pattern `$pattern`, the value `$value`."; 18337748cd8SNickeau } 18437748cd8SNickeau } 18537748cd8SNickeau 18637748cd8SNickeau} 187