[ Index ]

PHP Cross Reference of Joomla 4.2.2 documentation

title

Body

[close]

/libraries/src/Form/Rule/ -> CssIdentifierSubstringRule.php (source)

   1  <?php
   2  
   3  /**
   4   * Joomla! Content Management System
   5   *
   6   * @copyright  (C) 2020 Open Source Matters, Inc. <https://www.joomla.org>
   7   * @license    GNU General Public License version 2 or later; see LICENSE.txt
   8   */
   9  
  10  namespace Joomla\CMS\Form\Rule;
  11  
  12  use Joomla\CMS\Form\Form;
  13  use Joomla\CMS\Form\FormRule;
  14  use Joomla\Registry\Registry;
  15  
  16  // phpcs:disable PSR1.Files.SideEffects
  17  \defined('JPATH_PLATFORM') or die;
  18  // phpcs:enable PSR1.Files.SideEffects
  19  
  20  /**
  21   * Form Rule class for the Joomla Platform.
  22   *
  23   * @since  3.10.7
  24   */
  25  class CssIdentifierSubstringRule extends FormRule
  26  {
  27      /**
  28       * Method to test if a string is a valid CSS identifier substring
  29       *
  30       * @param   \SimpleXMLElement  $element  The SimpleXMLElement object representing the `<field>` tag for the form field object.
  31       * @param   mixed              $value    The form field value to validate.
  32       * @param   string             $group    The field name group control value. This acts as an array container for the field.
  33       *                                       For example if the field has name="foo" and the group value is set to "bar" then the
  34       *                                       full field name would end up being "bar[foo]".
  35       * @param   Registry           $input    An optional Registry object with the entire data set to validate against the entire form.
  36       * @param   Form               $form     The form object for which the field is being tested.
  37       *
  38       * @return  boolean  True if the value is valid, false otherwise.
  39       *
  40       * @since   3.10.7
  41       */
  42      public function test(\SimpleXMLElement $element, $value, $group = null, Registry $input = null, Form $form = null)
  43      {
  44          // If the field is empty and not required, the field is valid.
  45          $required = ((string) $element['required'] === 'true' || (string) $element['required'] === 'required');
  46  
  47          if (!$required && empty($value) && $value !== '0') {
  48              return true;
  49          }
  50  
  51          /**
  52           * The following regex rules are based on the Html::cleanCssIdentifier method from Drupal
  53           * https://github.com/drupal/drupal/blob/8.8.5/core/lib/Drupal/Component/Utility/Html.php#L116-L130
  54           *
  55           * with the addition for Joomla that we allow the colon (U+003A).
  56           */
  57  
  58          /**
  59           * Valid characters in a CSS identifier are:
  60           * - the hyphen (U+002D)
  61           * - a-z (U+0030 - U+0039)
  62           * - A-Z (U+0041 - U+005A)
  63           * - the underscore (U+005F)
  64           * - the colon (U+003A)
  65           * - 0-9 (U+0061 - U+007A)
  66           * - ISO 10646 characters U+00A1 and higher
  67           */
  68          // Make sure we allow multiple classes to be added
  69          $cssIdentifiers = explode(' ', $value);
  70  
  71          foreach ($cssIdentifiers as $identifier) {
  72              if (preg_match('/[^\\x{002D}\\x{0030}-\\x{0039}\\x{0041}-\\x{005A}\\x{005F}\\x{003A}\\x{0061}-\\x{007A}\\x{00A1}-\\x{FFFF}]/u', $identifier)) {
  73                  return false;
  74              }
  75          }
  76  
  77          return true;
  78      }
  79  }


Generated: Wed Sep 7 05:41:13 2022 Chilli.vc Blog - For Webmaster,Blog-Writer,System Admin and Domainer