MetaSubtitle::ProcessImageLink PHP Method

    public static function ProcessImageLink(array $p_matches)
    {
        $context = CampTemplate::singleton()->context();
        $oldImage = $context->image;
        $uri = $context->url;
        if ($uri->article->number == 0) {
            return '';
        }
        $imageNumber = $p_matches[1];
        $detailsString = $p_matches[2];
        $detailsArray = array();
        if (trim($detailsString) != '') {
            $imageAttributes = 'align|alt|sub|width|height|ratio|\\w+';
            preg_match_all("/[\\s]+({$imageAttributes})=\"([^\"]+)\"/i", $detailsString, $detailsArray1);
            $detailsArray1[1] = array_map('strtolower', $detailsArray1[1]);
            if (count($detailsArray1[1]) > 0) {
                $detailsArray1 = array_combine($detailsArray1[1], $detailsArray1[2]);
            } else {
                $detailsArray1 = array();
            }
            preg_match_all("/[\\s]+({$imageAttributes})=([^\"\\s]+)/i", $detailsString, $detailsArray2);
            $detailsArray2[1] = array_map('strtolower', $detailsArray2[1]);
            if (count($detailsArray2[1]) > 0) {
                $detailsArray2 = array_combine($detailsArray2[1], $detailsArray2[2]);
            } else {
                $detailsArray2 = array();
            }
            $detailsArray = array_merge($detailsArray1, $detailsArray2);
        }
        $articleImage = new ArticleImage($uri->article->number, null, $imageNumber);
        $image = new MetaImage($articleImage->getImageId());
        $context->image = $image;
        $imageOptions = '';
        $preferencesService = \Zend_Registry::get('container')->getService('system_preferences_service');
        if (array_key_exists('sub', $detailsArray)) {
            if ($preferencesService->MediaRichTextCaptions == 'Y') {
                $detailsArray['sub'] = html_entity_decode($detailsArray['sub'], ENT_QUOTES, 'UTF-8');
            } else {
                $detailsArray['sub'] = strip_tags(html_entity_decode($detailsArray['sub'], ENT_QUOTES, 'UTF-8'));
            }
        }
        $defaultOptions = array('ratio' => 'EditorImageRatio', 'width' => 'EditorImageResizeWidth', 'height' => 'EditorImageResizeHeight');
        foreach (array('ratio', 'width', 'height') as $imageOption) {
            $defaultOption = (int) $preferencesService->get($defaultOptions[$imageOption]);
            if (isset($detailsArray[$imageOption]) && $detailsArray[$imageOption] > 0) {
                if (isset($detailsArray['size']) && strpos($detailsArray['size'], 'px') !== false) {
                    $detailsArray['percentage'] = '100%';
                    $imageOptions .= " {$imageOption} " . rtrim($detailsArray['size'], 'px');
                } else {
                    $imageOptions .= " {$imageOption} " . (int) $detailsArray[$imageOption];
                }
            } elseif ($imageOption != 'ratio' && $defaultOption > 0) {
                $imageOptions .= " {$imageOption} {$defaultOption}";
            } elseif ($imageOption == 'ratio' && $defaultOption != 100) {
                $imageOptions .= " {$imageOption} {$defaultOption}";
            }
        }
        $imageOptions = trim($imageOptions);
        $imgZoomLink = '';
        if ($preferencesService->EditorImageZoom == 'Y' && strlen($imageOptions) > 0) {
            $imgZoomLink = '/' . $image->filerpath;
        }
        try {
            $uri->uri_parameter = "image {$imageOptions}";
            $templatesService = \Zend_Registry::get('container')->getService('newscoop.templates.service');
            $templatesService->setVector(array_merge($templatesService->getSmarty()->campsiteVector, array('params' => implode('__', array($uri->article->number, $imageNumber, $articleImage->getImageId())))));
            return $templatesService->fetchTemplate("editor_image.tpl", array('imageDetails' => $detailsArray, 'MediaRichTextCaptions' => $preferencesService->MediaRichTextCaptions, 'uri' => $uri, 'imgZoomLink' => $imgZoomLink));
        } catch (\Exception $e) {
            return $e->getMessage();
        }
    }