/** * Process Silverstripe HTML content * * @param string $value * @return string */ function ss($value) { if ($value) { // replace silverstripe links with ordinary links $value = \DBField::create_field('HTMLText', $value); if (App::offsetExists('\\Themonkeys\\Silverstripe\\ContentProcessor')) { $contentProcessor = App::make('\\Themonkeys\\Silverstripe\\ContentProcessor'); // process the <img> tags $value = preg_replace_callback('|<img[^>]+>|', function ($matches) use($contentProcessor) { $DOM = new DOMDocument(); $DOM->loadHTML($matches[0]); $img = $DOM->getElementsByTagName('img')->item(0); $src = $img->getAttribute('src'); $alt = $img->getAttribute('alt'); $attributes = array(); foreach ($img->attributes as $name => $value) { if ($name != 'src' && $name != 'alt') { $attributes[$name] = $value->textContent; } } if (preg_match('|assets/Uploads/(_resampled/ResizedImage([0-9]+)-)(.*)$|', $src, $matches)) { // convert to the non-resampled src $src = 'assets/Uploads/' . $matches[3]; } // make a Silverstripe image out of this URL $image = Image::get()->filter('Filename', $src)->first(); // allow the ContentProcessor implementation to process the image return $contentProcessor->renderImage($image, $alt, $attributes); }, $value); $processed = $contentProcessor->processContent($value); if ($processed) { $value = $processed; } } return $value; } }