$this->assign('fields', $dateFields);
}
+ /**
+ * Handy helper to produce the standard markup for an icon with alternative
+ * text for a title and screen readers.
+ *
+ * See also the smarty block function `icon`
+ *
+ * @param string $icon
+ * The class name of the icon to display.
+ * @param string $text
+ * The translated text to display.
+ * @param bool $condition
+ * Whether to display anything at all. This helps simplify code when a
+ * checkmark should appear if something is true.
+ * @param array $attribs
+ * Attributes to set or override on the icon element. Any standard
+ * attribute can be unset by setting the value to an empty string.
+ *
+ * @return string
+ * The whole bit to drop in.
+ */
+ public static function crmIcon($icon, $text = NULL, $condition = TRUE, $attribs = []) {
+ if (!$condition) {
+ return '';
+ }
+
+ // Add icon classes to any that might exist in $attribs
+ $classes = array_key_exists('class', $attribs) ? explode(' ', $attribs['class']) : [];
+ $classes[] = 'crm-i';
+ $classes[] = $icon;
+ $attribs['class'] = implode(' ', array_unique($classes));
+
+ $standardAttribs = ['aria-hidden' => 'true'];
+ if ($text === NULL || $text === '') {
+ $title = $sr = '';
+ }
+ else {
+ $standardAttribs['title'] = $text;
+ $sr = "<span class=\"sr-only\">$text</span>";
+ }
+
+ // Assemble attribs
+ $attribString = '';
+ // Strip out title if $attribs specifies a blank title
+ $attribs = array_merge($standardAttribs, $attribs);
+ foreach ($attribs as $attrib => $val) {
+ if (strlen($val)) {
+ $val = htmlspecialchars($val);
+ $attribString .= " $attrib=\"$val\"";
+ }
+ }
+
+ return "<i$attribString></i>$sr";
+ }
+
}