vendor/contao/core-bundle/src/Resources/contao/helper/functions.php line 136

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of Contao.
  4.  *
  5.  * (c) Leo Feyer
  6.  *
  7.  * @license LGPL-3.0-or-later
  8.  */
  9. use Contao\System;
  10. use Patchwork\Utf8;
  11. /**
  12.  * Add a log entry
  13.  *
  14.  * @param string $strMessage
  15.  * @param string $strLog
  16.  *
  17.  * @deprecated Deprecated since Contao 4.0, to be removed in Contao 5.0.
  18.  *             Use the logger service instead.
  19.  */
  20. function log_message($strMessage$strLog=null)
  21. {
  22.     @trigger_error('Using log_message() has been deprecated and will no longer work in Contao 5.0. Use the logger service instead.'E_USER_DEPRECATED);
  23.     if ($strLog === null)
  24.     {
  25.         $strLog 'prod-' date('Y-m-d') . '.log';
  26.     }
  27.     $strLogsDir null;
  28.     if (($container System::getContainer()) !== null)
  29.     {
  30.         $strLogsDir $container->getParameter('kernel.logs_dir');
  31.     }
  32.     if (!$strLogsDir)
  33.     {
  34.         $strLogsDir $container->getParameter('kernel.project_dir') . '/var/logs';
  35.     }
  36.     error_log(sprintf("[%s] %s\n"date('d-M-Y H:i:s'), $strMessage), 3$strLogsDir '/' $strLog);
  37. }
  38. /**
  39.  * Scan a directory and return its files and folders as array
  40.  *
  41.  * @param string  $strFolder
  42.  * @param boolean $blnUncached
  43.  *
  44.  * @return array
  45.  */
  46. function scan($strFolder$blnUncached=false)
  47. {
  48.     global $arrScanCache;
  49.     // Add a trailing slash
  50.     if (substr($strFolder, -11) != '/')
  51.     {
  52.         $strFolder .= '/';
  53.     }
  54.     // Load from cache
  55.     if (!$blnUncached && isset($arrScanCache[$strFolder]))
  56.     {
  57.         return $arrScanCache[$strFolder];
  58.     }
  59.     $arrReturn = array();
  60.     // Scan directory
  61.     foreach (scandir($strFolderSCANDIR_SORT_ASCENDING) as $strFile)
  62.     {
  63.         if ($strFile == '.' || $strFile == '..')
  64.         {
  65.             continue;
  66.         }
  67.         $arrReturn[] = $strFile;
  68.     }
  69.     // Cache the result
  70.     if (!$blnUncached)
  71.     {
  72.         $arrScanCache[$strFolder] = $arrReturn;
  73.     }
  74.     return $arrReturn;
  75. }
  76. /**
  77.  * Convert special characters to HTML entities and make sure that
  78.  * entities are never double converted.
  79.  *
  80.  * @param string  $strString
  81.  * @param boolean $blnStripInsertTags
  82.  *
  83.  * @return string
  84.  *
  85.  * @deprecated Using specialchars() has been deprecated and will no longer work in Contao 5.0.
  86.  *             Use StringUtil::specialchars() instead.
  87.  */
  88. function specialchars($strString$blnStripInsertTags=false)
  89. {
  90.     @trigger_error('Using specialchars() has been deprecated and will no longer work in Contao 5.0. Use StringUtil::specialchars() instead.'E_USER_DEPRECATED);
  91.     if ($blnStripInsertTags)
  92.     {
  93.         $strString strip_insert_tags($strString);
  94.     }
  95.     return htmlspecialchars($strStringENT_QUOTES$GLOBALS['TL_CONFIG']['characterSet'], false);
  96. }
  97. /**
  98.  * Standardize a parameter (strip special characters and convert spaces)
  99.  *
  100.  * @param string  $strString
  101.  * @param boolean $blnPreserveUppercase
  102.  *
  103.  * @return string
  104.  *
  105.  * @deprecated Using standardize() has been deprecated and will no longer work in Contao 5.0.
  106.  *             Use StringUtil::standardize() instead.
  107.  */
  108. function standardize($strString$blnPreserveUppercase=false)
  109. {
  110.     @trigger_error('Using standardize() has been deprecated and will no longer work in Contao 5.0. Use StringUtil::standardize() instead.'E_USER_DEPRECATED);
  111.     $arrSearch = array('/[^\pN\pL \.\&\/_-]+/u''/[ \.\&\/-]+/');
  112.     $arrReplace = array('''-');
  113.     $strString html_entity_decode($strStringENT_QUOTES$GLOBALS['TL_CONFIG']['characterSet']);
  114.     $strString strip_insert_tags($strString);
  115.     $strString preg_replace($arrSearch$arrReplace$strString);
  116.     if (is_numeric(substr($strString01)))
  117.     {
  118.         $strString 'id-' $strString;
  119.     }
  120.     if (!$blnPreserveUppercase)
  121.     {
  122.         $strString Patchwork\Utf8::strtolower($strString);
  123.     }
  124.     return trim($strString'-');
  125. }
  126. /**
  127.  * Remove Contao insert tags from a string
  128.  *
  129.  * @param string $strString
  130.  *
  131.  * @return string
  132.  *
  133.  * @deprecated Using strip_insert_tags() has been deprecated and will no longer work in Contao 5.0.
  134.  *             Use StringUtil::stripInsertTags() instead.
  135.  */
  136. function strip_insert_tags($strString)
  137. {
  138.     @trigger_error('Using strip_insert_tags() has been deprecated and will no longer work in Contao 5.0. Use StringUtil::stripInsertTags() instead.'E_USER_DEPRECATED);
  139.     $count 0;
  140.     do
  141.     {
  142.         $strString preg_replace('/{{[^{}]*}}/'''$strString, -1$count);
  143.     }
  144.     while ($count 0);
  145.     return $strString;
  146. }
  147. /**
  148.  * Return an unserialized array or the argument
  149.  *
  150.  * @param mixed   $varValue
  151.  * @param boolean $blnForceArray
  152.  *
  153.  * @return mixed
  154.  *
  155.  * @deprecated Using deserialize() has been deprecated and will no longer work in Contao 5.0.
  156.  *             Use StringUtil::deserialize() instead.
  157.  */
  158. function deserialize($varValue$blnForceArray=false)
  159. {
  160.     @trigger_error('Using deserialize() has been deprecated and will no longer work in Contao 5.0. Use StringUtil::deserialize() instead.'E_USER_DEPRECATED);
  161.     // Already an array
  162.     if (is_array($varValue))
  163.     {
  164.         return $varValue;
  165.     }
  166.     // Null
  167.     if ($varValue === null)
  168.     {
  169.         return $blnForceArray ? array() : null;
  170.     }
  171.     // Not a string
  172.     if (!is_string($varValue))
  173.     {
  174.         return $blnForceArray ? array($varValue) : $varValue;
  175.     }
  176.     // Empty string
  177.     if (trim($varValue) === '')
  178.     {
  179.         return $blnForceArray ? array() : '';
  180.     }
  181.     // Potentially including an object (see #6724)
  182.     if (preg_match('/[OoC]:\+?[0-9]+:"/'$varValue))
  183.     {
  184.         trigger_error('The deserialize() function does not allow serialized objects'E_USER_WARNING);
  185.         return $blnForceArray ? array($varValue) : $varValue;
  186.     }
  187.     $varUnserialized = @unserialize($varValue, array('allowed_classes' => false));
  188.     if (is_array($varUnserialized))
  189.     {
  190.         $varValue $varUnserialized;
  191.     }
  192.     elseif ($blnForceArray)
  193.     {
  194.         $varValue = array($varValue);
  195.     }
  196.     return $varValue;
  197. }
  198. /**
  199.  * Split a string into fragments, remove whitespace and return fragments as array
  200.  *
  201.  * @param string $strPattern
  202.  * @param string $strString
  203.  *
  204.  * @return array
  205.  *
  206.  * @deprecated Using trimsplit() has been deprecated and will no longer work in Contao 5.0.
  207.  *             Use StringUtil::trimsplit() instead.
  208.  */
  209. function trimsplit($strPattern$strString)
  210. {
  211.     @trigger_error('Using trimsplit() has been deprecated and will no longer work in Contao 5.0. Use StringUtil::trimsplit() instead.'E_USER_DEPRECATED);
  212.     // Split
  213.     if (strlen($strPattern) == 1)
  214.     {
  215.         $arrFragments array_map('trim'explode($strPattern$strString));
  216.     }
  217.     else
  218.     {
  219.         $arrFragments array_map('trim'preg_split('/' $strPattern '/ui'$strString));
  220.     }
  221.     // Empty array
  222.     if (count($arrFragments) < && !strlen($arrFragments[0]))
  223.     {
  224.         $arrFragments = array();
  225.     }
  226.     return $arrFragments;
  227. }
  228. /**
  229.  * Convert all ampersands into their HTML entity (default) or unencoded value
  230.  *
  231.  * @param string  $strString
  232.  * @param boolean $blnEncode
  233.  *
  234.  * @return string
  235.  */
  236. function ampersand($strString$blnEncode=true)
  237. {
  238.     return preg_replace('/&(amp;)?/i', ($blnEncode '&amp;' '&'), $strString);
  239. }
  240. /**
  241.  * Replace line breaks with HTML5-style <br> tags
  242.  *
  243.  * @param string  $str
  244.  * @param boolean $xhtml
  245.  *
  246.  * @return string
  247.  */
  248. function nl2br_html5($str$xhtml=false)
  249. {
  250.     return nl2br($str$xhtml);
  251. }
  252. /**
  253.  * Replace line breaks with XHTML-style <br /> tags
  254.  *
  255.  * @param string $str
  256.  *
  257.  * @return string
  258.  */
  259. function nl2br_xhtml($str)
  260. {
  261.     return nl2br($str);
  262. }
  263. /**
  264.  * Replace line breaks with <br> tags preserving preformatted text
  265.  *
  266.  * @param string  $str
  267.  * @param boolean $xhtml
  268.  *
  269.  * @return string
  270.  */
  271. function nl2br_pre($str$xhtml=false)
  272. {
  273.     $str $xhtml nl2br_xhtml($str) : nl2br_html5($str);
  274.     if (stripos($str'<pre') === false)
  275.     {
  276.         return $str;
  277.     }
  278.     $chunks = array();
  279.     preg_match_all('/<pre[^>]*>.*<\/pre>/Uis'$str$chunks);
  280.     foreach ($chunks as $chunk)
  281.     {
  282.         $str str_replace($chunkstr_ireplace(array('<br>''<br />'), ''$chunk), $str);
  283.     }
  284.     return $str;
  285. }
  286. /**
  287.  * Compare two file names using a case insensitive "natural order" algorithm
  288.  *
  289.  * @param string $a
  290.  * @param string $b
  291.  *
  292.  * @return integer
  293.  */
  294. function basename_natcasecmp($a$b)
  295. {
  296.     return strnatcasecmp(basename($a), basename($b));
  297. }
  298. /**
  299.  * Compare two file names using a case insensitive, reverse "natural order" algorithm
  300.  *
  301.  * @param string $a
  302.  * @param string $b
  303.  *
  304.  * @return integer
  305.  */
  306. function basename_natcasercmp($a$b)
  307. {
  308.     return -strnatcasecmp(basename($a), basename($b));
  309. }
  310. /**
  311.  * Sort an array by keys using a case insensitive "natural order" algorithm
  312.  *
  313.  * @param array $arrArray
  314.  *
  315.  * @return array
  316.  */
  317. function natcaseksort($arrArray)
  318. {
  319.     $arrBuffer array_flip($arrArray);
  320.     natcasesort($arrBuffer);
  321.     $arrBuffer array_flip($arrBuffer);
  322.     return $arrBuffer;
  323. }
  324. /**
  325.  * Compare two values based on their length (ascending)
  326.  *
  327.  * @param integer $a
  328.  * @param integer $b
  329.  *
  330.  * @return integer
  331.  */
  332. function length_sort_asc($a$b)
  333. {
  334.     return strlen($a) - strlen($b);
  335. }
  336. /**
  337.  * Compare two values based on their length (descending)
  338.  *
  339.  * @param integer $a
  340.  * @param integer $b
  341.  *
  342.  * @return integer
  343.  */
  344. function length_sort_desc($a$b)
  345. {
  346.     return strlen($b) - strlen($a);
  347. }
  348. /**
  349.  * Insert a parameter or array into an existing array at a particular index
  350.  *
  351.  * @param array   $arrCurrent
  352.  * @param integer $intIndex
  353.  * @param mixed   $arrNew
  354.  */
  355. function array_insert(&$arrCurrent$intIndex$arrNew)
  356. {
  357.     if (!is_array($arrCurrent))
  358.     {
  359.         $arrCurrent $arrNew;
  360.         return;
  361.     }
  362.     if (is_array($arrNew))
  363.     {
  364.         $arrBuffer array_splice($arrCurrent0$intIndex);
  365.         $arrCurrent array_merge_recursive($arrBuffer$arrNew$arrCurrent);
  366.         return;
  367.     }
  368.     array_splice($arrCurrent$intIndex0$arrNew);
  369. }
  370. /**
  371.  * Duplicate a particular element of an array
  372.  *
  373.  * @param array   $arrStack
  374.  * @param integer $intIndex
  375.  *
  376.  * @return array
  377.  *
  378.  * @deprecated Deprecated since Contao 4.3, to be removed in Contao 5.0.
  379.  */
  380. function array_duplicate($arrStack$intIndex)
  381. {
  382.     @trigger_error('Using array_duplicate() has been deprecated and will no longer work in Contao 5.0.'E_USER_DEPRECATED);
  383.     $arrBuffer $arrStack;
  384.     $arrStack = array();
  385.     for ($i=0$i<=$intIndex$i++)
  386.     {
  387.         $arrStack[] = $arrBuffer[$i];
  388.     }
  389.     for ($i=$intIndex$c=count($arrBuffer); $i<$c$i++)
  390.     {
  391.         $arrStack[] = $arrBuffer[$i];
  392.     }
  393.     return $arrStack;
  394. }
  395. /**
  396.  * Move an array element one position up
  397.  *
  398.  * @param array   $arrStack
  399.  * @param integer $intIndex
  400.  *
  401.  * @return array
  402.  *
  403.  * @deprecated Deprecated since Contao 4.3, to be removed in Contao 5.0.
  404.  */
  405. function array_move_up($arrStack$intIndex)
  406. {
  407.     @trigger_error('Using array_move_up() has been deprecated and will no longer work in Contao 5.0.'E_USER_DEPRECATED);
  408.     if ($intIndex 0)
  409.     {
  410.         $arrBuffer $arrStack[$intIndex];
  411.         $arrStack[$intIndex] = $arrStack[($intIndex-1)];
  412.         $arrStack[($intIndex-1)] = $arrBuffer;
  413.     }
  414.     else
  415.     {
  416.         $arrStack[] = $arrStack[$intIndex];
  417.         array_shift($arrStack);
  418.     }
  419.     return $arrStack;
  420. }
  421. /**
  422.  * Move an array element one position down
  423.  *
  424.  * @param array   $arrStack
  425.  * @param integer $intIndex
  426.  *
  427.  * @return array
  428.  *
  429.  * @deprecated Deprecated since Contao 4.3, to be removed in Contao 5.0.
  430.  */
  431. function array_move_down($arrStack$intIndex)
  432. {
  433.     @trigger_error('Using array_move_down() has been deprecated and will no longer work in Contao 5.0.'E_USER_DEPRECATED);
  434.     if (($intIndex+1) < count($arrStack))
  435.     {
  436.         $arrBuffer $arrStack[$intIndex];
  437.         $arrStack[$intIndex] = $arrStack[($intIndex+1)];
  438.         $arrStack[($intIndex+1)] = $arrBuffer;
  439.     }
  440.     else
  441.     {
  442.         array_unshift($arrStack$arrStack[$intIndex]);
  443.         array_pop($arrStack);
  444.     }
  445.     return $arrStack;
  446. }
  447. /**
  448.  * Delete a particular element of an array
  449.  *
  450.  * @param array   $arrStack
  451.  * @param integer $intIndex
  452.  *
  453.  * @return array
  454.  *
  455.  * @deprecated Deprecated since Contao 4.3, to be removed in Contao 5.0.
  456.  */
  457. function array_delete($arrStack$intIndex)
  458. {
  459.     @trigger_error('Using array_delete() has been deprecated and will no longer work in Contao 5.0.'E_USER_DEPRECATED);
  460.     unset($arrStack[$intIndex]);
  461.     return array_values($arrStack);
  462. }
  463. /**
  464.  * Return true if an array is associative
  465.  *
  466.  * @param array $arrArray
  467.  *
  468.  * @return boolean
  469.  */
  470. function array_is_assoc($arrArray)
  471. {
  472.     return is_array($arrArray) && array_keys($arrArray) !== range(0count($arrArray) - 1);
  473. }
  474. /**
  475.  * Return a specific character
  476.  *
  477.  * Unicode version of chr() that handles UTF-8 characters.
  478.  *
  479.  * @param integer $dec
  480.  *
  481.  * @return string
  482.  *
  483.  * @deprecated Deprecated since Contao 4.0, to be removed in Contao 5.0.
  484.  *             Use Patchwork\Utf8::chr() instead.
  485.  */
  486. function utf8_chr($dec)
  487. {
  488.     @trigger_error('Using utf8_chr() has been deprecated and will no longer work in Contao 5.0. Use Patchwork\Utf8::chr() instead.'E_USER_DEPRECATED);
  489.     return Utf8::chr($dec);
  490. }
  491. /**
  492.  * Return the ASCII value of a character
  493.  *
  494.  * Unicode version of ord() that handles UTF-8 characters.
  495.  *
  496.  * @param string $str
  497.  *
  498.  * @return integer
  499.  *
  500.  * @deprecated Deprecated since Contao 4.0, to be removed in Contao 5.0.
  501.  *             Use Patchwork\Utf8::ord() instead.
  502.  */
  503. function utf8_ord($str)
  504. {
  505.     @trigger_error('Using utf8_ord() has been deprecated and will no longer work in Contao 5.0. Use Patchwork\Utf8::ord() instead.'E_USER_DEPRECATED);
  506.     return Utf8::ord($str);
  507. }
  508. /**
  509.  * Convert character encoding
  510.  *
  511.  * @param string $str
  512.  * @param string $to
  513.  * @param string $from
  514.  *
  515.  * @return string
  516.  *
  517.  * @deprecated Deprecated since Contao 4.0, to be removed in Contao 5.0.
  518.  *             Use StringUtil::convertEncoding() instead.
  519.  */
  520. function utf8_convert_encoding($str$to$from=null)
  521. {
  522.     @trigger_error('Using utf8_convert_encoding() has been deprecated and will no longer work in Contao 5.0. Use StringUtil::convertEncoding() instead.'E_USER_DEPRECATED);
  523.     if (!$str)
  524.     {
  525.         return '';
  526.     }
  527.     if (!$from)
  528.     {
  529.         $from mb_detect_encoding($str);
  530.     }
  531.     if ($from == $to)
  532.     {
  533.         return $str;
  534.     }
  535.     if ($from == 'UTF-8' && $to == 'ISO-8859-1')
  536.     {
  537.         return utf8_decode($str);
  538.     }
  539.     if ($from == 'ISO-8859-1' && $to == 'UTF-8')
  540.     {
  541.         return utf8_encode($str);
  542.     }
  543.     return mb_convert_encoding($str$to$from);
  544. }
  545. /**
  546.  * Convert all unicode entities to their applicable characters
  547.  *
  548.  * Calls Utf8::chr() to convert unicode entities. HTML entities like '&nbsp;'
  549.  * or '&quot;' will not be decoded.
  550.  *
  551.  * @param string $str
  552.  *
  553.  * @return string
  554.  *
  555.  * @deprecated Deprecated since Contao 4.0, to be removed in Contao 5.0.
  556.  *             Use html_entity_decode() instead.
  557.  */
  558. function utf8_decode_entities($str)
  559. {
  560.     @trigger_error('Using utf8_decode_entities() has been deprecated and will no longer work in Contao 5.0. Use html_entity_decode() instead.'E_USER_DEPRECATED);
  561.     $str preg_replace_callback('~&#x([0-9a-f]+);~i', static function ($matches) { return Utf8::chr(hexdec($matches[1])); }, $str);
  562.     $str preg_replace_callback('~&#([0-9]+);~', static function ($matches) { return Utf8::chr($matches[1]); }, $str);
  563.     return $str;
  564. }
  565. /**
  566.  * Callback function for utf8_decode_entities
  567.  *
  568.  * @param array $matches
  569.  *
  570.  * @return string
  571.  *
  572.  * @deprecated Deprecated since Contao 4.0, to be removed in Contao 5.0.
  573.  */
  574. function utf8_chr_callback($matches)
  575. {
  576.     @trigger_error('Using utf8_chr_callback() has been deprecated and will no longer work in Contao 5.0.'E_USER_DEPRECATED);
  577.     return Utf8::chr($matches[1]);
  578. }
  579. /**
  580.  * Callback function for utf8_decode_entities
  581.  *
  582.  * @param array $matches
  583.  *
  584.  * @return string
  585.  *
  586.  * @deprecated Deprecated since Contao 4.0, to be removed in Contao 5.0.
  587.  */
  588. function utf8_hexchr_callback($matches)
  589. {
  590.     @trigger_error('Using utf8_hexchr_callback() has been deprecated and will no longer work in Contao 5.0.'E_USER_DEPRECATED);
  591.     return Utf8::chr(hexdec($matches[1]));
  592. }
  593. /**
  594.  * Detect the encoding of a string
  595.  *
  596.  * @param string $str
  597.  *
  598.  * @return string
  599.  *
  600.  * @deprecated Deprecated since Contao 4.0, to be removed in Contao 5.0.
  601.  *             Use mb_detect_encoding() instead.
  602.  */
  603. function utf8_detect_encoding($str)
  604. {
  605.     @trigger_error('Using utf8_detect_encoding() has been deprecated and will no longer work in Contao 5.0. Use mb_detect_encoding() instead.'E_USER_DEPRECATED);
  606.     return mb_detect_encoding($str, array('ASCII''ISO-2022-JP''UTF-8''EUC-JP''ISO-8859-1'));
  607. }
  608. /**
  609.  * Romanize a string
  610.  *
  611.  * @param string $str
  612.  *
  613.  * @return string
  614.  *
  615.  * @deprecated Deprecated since Contao 4.0, to be removed in Contao 5.0.
  616.  *             Use Patchwork\Utf8::toAscii() instead.
  617.  */
  618. function utf8_romanize($str)
  619. {
  620.     @trigger_error('Using utf8_romanize() has been deprecated and will no longer work in Contao 5.0. Use Patchwork\Utf8::toAscii() instead.'E_USER_DEPRECATED);
  621.     return Utf8::toAscii($str);
  622. }
  623. /**
  624.  * Determine the number of characters of a string
  625.  *
  626.  * @param string $str
  627.  *
  628.  * @return integer
  629.  *
  630.  * @deprecated Deprecated since Contao 4.0, to be removed in Contao 5.0.
  631.  *             Use Patchwork\Utf8::strlen() instead.
  632.  */
  633. function utf8_strlen($str)
  634. {
  635.     @trigger_error('Using utf8_strlen() has been deprecated and will no longer work in Contao 5.0. Use Patchwork\Utf8::strlen() instead.'E_USER_DEPRECATED);
  636.     return Utf8::strlen($str);
  637. }
  638. /**
  639.  * Find the position of the first occurence of a string in another string
  640.  *
  641.  * @param string  $haystack
  642.  * @param string  $needle
  643.  * @param integer $offset
  644.  *
  645.  * @return integer
  646.  *
  647.  * @deprecated Deprecated since Contao 4.0, to be removed in Contao 5.0.
  648.  *             Use Patchwork\Utf8::strpos instead.
  649.  */
  650. function utf8_strpos($haystack$needle$offset=0)
  651. {
  652.     @trigger_error('Using utf8_strpos() has been deprecated and will no longer work in Contao 5.0. Use Patchwork\Utf8::strpos() instead.'E_USER_DEPRECATED);
  653.     return Utf8::strpos($haystack$needle$offset);
  654. }
  655. /**
  656.  * Find the last occurrence of a character in a string
  657.  *
  658.  * @param string $haystack
  659.  * @param string $needle
  660.  *
  661.  * @return string
  662.  *
  663.  * @deprecated Deprecated since Contao 4.0, to be removed in Contao 5.0.
  664.  *             Use Patchwork\Utf8::strrchr() instead.
  665.  */
  666. function utf8_strrchr($haystack$needle)
  667. {
  668.     @trigger_error('Using utf8_strrchr() has been deprecated and will no longer work in Contao 5.0. Use Patchwork\Utf8::strrchr() instead.'E_USER_DEPRECATED);
  669.     return Utf8::strrchr($haystack$needle);
  670. }
  671. /**
  672.  * Find the position of the last occurrence of a string in another string
  673.  *
  674.  * @param string $haystack
  675.  * @param string $needle
  676.  *
  677.  * @return mixed
  678.  *
  679.  * @deprecated Deprecated since Contao 4.0, to be removed in Contao 5.0.
  680.  *             Use Patchwork\Utf8::strrpos() instead.
  681.  */
  682. function utf8_strrpos($haystack$needle)
  683. {
  684.     @trigger_error('Using utf8_strrpos() has been deprecated and will no longer work in Contao 5.0. Use Patchwork\Utf8::strrpos() instead.'E_USER_DEPRECATED);
  685.     return Utf8::strrpos($haystack$needle);
  686. }
  687. /**
  688.  * Find the first occurrence of a string in another string
  689.  *
  690.  * @param string $haystack
  691.  * @param string $needle
  692.  *
  693.  * @return string
  694.  *
  695.  * @deprecated Deprecated since Contao 4.0, to be removed in Contao 5.0.
  696.  *             Use Patchwork\Utf8::strstr() instead.
  697.  */
  698. function utf8_strstr($haystack$needle)
  699. {
  700.     @trigger_error('Using utf8_strstr() has been deprecated and will no longer work in Contao 5.0. Use Patchwork\Utf8::strstr() instead.'E_USER_DEPRECATED);
  701.     return Utf8::strstr($haystack$needle);
  702. }
  703. /**
  704.  * Make a string lowercase
  705.  *
  706.  * @param string $str
  707.  *
  708.  * @return string
  709.  *
  710.  * @deprecated Deprecated since Contao 4.0, to be removed in Contao 5.0.
  711.  *             Use Patchwork\Utf8::strtolower() instead.
  712.  */
  713. function utf8_strtolower($str)
  714. {
  715.     @trigger_error('Using utf8_strtolower() has been deprecated and will no longer work in Contao 5.0. Use Patchwork\Utf8::strtolower() instead.'E_USER_DEPRECATED);
  716.     return Utf8::strtolower($str);
  717. }
  718. /**
  719.  * Make a string uppercase
  720.  *
  721.  * @param string $str
  722.  *
  723.  * @return string
  724.  *
  725.  * @deprecated Deprecated since Contao 4.0, to be removed in Contao 5.0.
  726.  *             Use Patchwork\Utf8::strtoupper() instead.
  727.  */
  728. function utf8_strtoupper($str)
  729. {
  730.     @trigger_error('Using utf8_strtoupper() has been deprecated and will no longer work in Contao 5.0. Use Patchwork\Utf8::strtoupper() instead.'E_USER_DEPRECATED);
  731.     return Utf8::strtoupper($str);
  732. }
  733. /**
  734.  * Return substring of a string
  735.  *
  736.  * @param string  $str
  737.  * @param integer $start
  738.  * @param integer $length
  739.  *
  740.  * @return string
  741.  *
  742.  * @deprecated Deprecated since Contao 4.0, to be removed in Contao 5.0.
  743.  *             Use Patchwork\Utf8::substr() instead.
  744.  */
  745. function utf8_substr($str$start$length=null)
  746. {
  747.     @trigger_error('Using utf8_substr() has been deprecated and will no longer work in Contao 5.0. Use Patchwork\Utf8::substr() instead.'E_USER_DEPRECATED);
  748.     return Utf8::substr($str$start$length);
  749. }
  750. /**
  751.  * Make sure the first letter is uppercase
  752.  *
  753.  * @param string $str
  754.  *
  755.  * @return string
  756.  *
  757.  * @deprecated Deprecated since Contao 4.0, to be removed in Contao 5.0.
  758.  *             Use Patchwork\Utf8::ucfirst() instead.
  759.  */
  760. function utf8_ucfirst($str)
  761. {
  762.     @trigger_error('Using utf8_ucfirst() has been deprecated and will no longer work in Contao 5.0. Use Patchwork\Utf8::ucfirst() instead.'E_USER_DEPRECATED);
  763.     return Utf8::ucfirst($str);
  764. }
  765. /**
  766.  * Convert a string to an array
  767.  *
  768.  * @param string $str
  769.  *
  770.  * @return array
  771.  *
  772.  * @deprecated Deprecated since Contao 4.0, to be removed in Contao 5.0.
  773.  *             Use Patchwork\Utf8::str_split() instead.
  774.  */
  775. function utf8_str_split($str)
  776. {
  777.     @trigger_error('Using utf8_str_split() has been deprecated and will no longer work in Contao 5.0. Use Patchwork\Utf8::str_split() instead.'E_USER_DEPRECATED);
  778.     return Utf8::str_split($str);
  779. }
  780. /**
  781.  * Replace line breaks with <br> tags (to be used with preg_replace_callback)
  782.  *
  783.  * @param array $matches
  784.  *
  785.  * @return string
  786.  *
  787.  * @deprecated Deprecated since Contao 4.0, to be removed in Contao 5.0.
  788.  */
  789. function nl2br_callback($matches)
  790. {
  791.     @trigger_error('Using nl2br_callback() has been deprecated and will no longer work in Contao 5.0.'E_USER_DEPRECATED);
  792.     return str_replace("\n"'<br>'$matches[0]);
  793. }