public function formField()
 {
     if (class_exists('FontAwesomeIconPickerField') && static::$use_icon_picker) {
         $icon = \FontAwesomeIconPickerField::create('use', _t('Shortcodable.ICON', 'Icon'));
         $icon->addExtraClass('icp--css-icon-shortcode')->setAttribute('data-placement', 'bottomLeft');
         if ($validIcons = HTMLEditorField::config()->valid_icon_shortcodes) {
             $icon->setAttribute('data-icons', json_encode(array_keys($validIcons)));
         }
     } else {
         if (HTMLEditorField::config()->valid_icon_shortcodes) {
             $icon = DropdownField::create('use', _t('Shortcodable.ICON', 'Icon'), Utilities::map_array_to_i18n(HTMLEditorField::config()->valid_icon_shortcodes, 'Icon'));
         } else {
             $icon = TextField::create('use', _t('Shortcodable.ICON', 'Icon'));
         }
     }
     if (HTMLEditorField::config()->prepend_icon) {
         $iconPrepend = ReadonlyField::create('prepend', _t('Shortcodable.ICON_PREPEND', 'Prepend'), HTMLEditorField::config()->prepend_icon);
     } else {
         $iconPrepend = TextField::create('prepend', _t('Shortcodable.ICON_PREPEND', 'Prepend'))->setAttribute('placeholder', static::$default_classes);
     }
     if (HTMLEditorField::config()->valid_icon_classes) {
         $iconClasses = DropdownField::create('classes', _t('Shortcodable.ICON_CLASSES', 'Classes'), array_combine(HTMLEditorField::config()->valid_icon_classes, HTMLEditorField::config()->valid_icon_classes));
     } else {
         $iconClasses = TextField::create('classes', _t('Shortcodable.ICON_CLASSES', 'Classes'));
     }
     return CompositeField::create(FieldList::create($icon, $iconPrepend, $iconClasses));
 }
 protected function inlineFiles($inlines, $setVar = 'customCSS', $unsetVar = 'css', $replaceString = '%s', $id = 'Inline-CSS')
 {
     if (count($inlines)) {
         $this->removeIfFound($id, $setVar);
         $items = [];
         $isDev = Director::isDev();
         foreach ($inlines as $file => $data) {
             if (!Director::is_absolute_url($file)) {
                 $file = Director::getAbsFile($file);
             }
             $key = Utilities::clean_cache_key($file);
             $content = singleton('require')->cache()->load($key);
             if ($content === false) {
                 $content = @file_get_contents($file);
                 if ($content && !$isDev) {
                     $content = singleton('require')->minify_contents_according_to_type($content, $file);
                 }
                 if (!$isDev) {
                     singleton('require')->cache()->save($content, $key);
                 }
             }
             if ($content) {
                 $items[$file] = $content;
                 $this->removeIfFound($id, $unsetVar);
             }
         }
         if (count($items)) {
             if ($setVar == 'customHeadTags') {
                 $this->insertHeadTags(sprintf($replaceString, implode("\n\n", $items)), $id);
             } elseif ($setVar == 'customScript') {
                 $this->customScript(sprintf($replaceString, implode("\n\n", $items)), $id);
             } elseif ($setVar == 'customCSS') {
                 $this->customCSS(sprintf($replaceString, implode("\n\n", $items)), $id);
             }
         }
     }
 }
 public function formField()
 {
     $shortcodes = Utilities::map_array_to_i18n(Member::config()->valid_shortcode_fields, 'Member');
     natsort($shortcodes);
     return CompositeField::create(FieldList::create(DropdownField::create('field', _t('Shortcodable.FIELD', 'Field'), $shortcodes), TextField::create('default', _t('Shortcodable.DEFAULT_VALUE', 'Default Value')), DropdownField::create('type', _t('Shortcodable.DISPLAY_TYPE', 'Display type'), ['' => 'Nice']), TextField::create('caption', _t('Shortcodable.CAPTION', 'Caption'))->setDescription(_t('Shortcodable.DESC-CAPTION', 'Only used for values that will resolve to links')), DropdownField::create('nolink', _t('Shortcodable.NO_AUTO_LINK', 'Autolink'), ['' => 'Yes', '1' => 'No'])));
 }
 public function testCleanCacheKey()
 {
     $this->assertEquals('Test_', Utilities::clean_cache_key('Test#&^%$'));
     $this->assertEquals('Test_isawesome', Utilities::clean_cache_key('Test#&^%$', ['is' => 'awesome']));
     $this->assertEquals('Test_isawesome_andmore', Utilities::clean_cache_key('Test#&^%$', ['is' => 'awesome', 'and' => 'more']));
 }