function FM_TTML_bindAttachments($entryId, $folderPath, $folderURL, $content, $useAbsolutePath = false, $bRssMode = false) { $context = Model_Context::getInstance(); requireModel('blog.attachment'); $blogid = getBlogId(); getAttachments($blogid, $entryId); // For attachment caching. $view = str_replace('[##_ATTACH_PATH_##]', $useAbsolutePath ? $context->getProperty('uri.service') . "/attach/{$blogid}" : $folderURL, $content); $view = str_replace('http://tt_attach_path/', $useAbsolutePath ? $context->getProperty('uri.service') . "/attach/{$blogid}/" : $folderURL . '/', $view); $count = 0; $bWritedGalleryJS = false; while (($start = strpos($view, '[##_')) !== false && ($end = strpos($view, '_##]', $start + 4)) !== false) { $count++; $attributes = explode('|', substr($view, $start + 4, $end - $start - 4)); $prefix = ''; $buf = ''; if ($attributes[0] == 'Gallery') { if (count($attributes) % 2 == 1) { array_pop($attributes); } if (defined('__TEXTCUBE_MOBILE__') || defined('__TEXTCUBE_IPHONE__')) { $images = array_slice($attributes, 1, count($attributes) - 2); for ($i = 0; $i < count($images); $i++) { if (!empty($images[$i])) { if ($i % 2 == 0) { $buf .= '<div align="center">' . FM_TTML_getAttachmentBinder($images[$i], '', $folderPath, $folderURL, 1, $useAbsolutePath, $bRssMode) . '</div>'; } else { if (strlen($images[$i]) > 0) { $buf .= "<div align=\"center\">{$images[$i]}</div>"; } } } } } else { if ($bRssMode == true) { $items = array(); for ($i = 1; $i < sizeof($attributes) - 2; $i += 2) { array_push($items, array($attributes[$i], $attributes[$i + 1])); } $galleryAttributes = Misc::getAttributesFromString($attributes[sizeof($attributes) - 1]); $images = array_slice($attributes, 1, count($attributes) - 2); for ($i = 0; $i < count($images); $i++) { if (!empty($images[$i])) { if ($i % 2 == 0) { $setWidth = $setHeight = 0; if (list($width, $height) = @getimagesize("{$folderPath}/{$images[$i]}")) { $setWidth = $width; $setHeight = $height; if (isset($galleryAttributes['width']) && $galleryAttributes['width'] < $setWidth) { $setHeight = $setHeight * $galleryAttributes['width'] / $setWidth; $setWidth = $galleryAttributes['width']; } if (isset($galleryAttributes['height']) && $galleryAttributes['height'] < $setHeight) { $setWidth = $setWidth * $galleryAttributes['height'] / $setHeight; $setHeight = $galleryAttributes['height']; } if (intval($setWidth > 0) && intval($setHeight) > 0) { $tempProperty = 'width="' . intval($setWidth) . '" height="' . intval($setHeight) . '"'; } else { $tempProperty = ''; } $buf .= '<div align="center">' . FM_TTML_getAttachmentBinder($images[$i], $tempProperty, $folderPath, $folderURL, 1, $useAbsolutePath, $bRssMode) . '</div>'; } } else { if (strlen($images[$i]) > 0) { $buf .= "<div align=\"center\">{$images[$i]}</div>"; } } } } } else { $id = "gallery{$entryId}{$count}"; $cssId = "tt-gallery-{$entryId}-{$count}"; $contentWidth = Misc::getContentWidth(); $items = array(); for ($i = 1; $i < sizeof($attributes) - 2; $i += 2) { array_push($items, array($attributes[$i], $attributes[$i + 1])); } $galleryAttributes = Misc::getAttributesFromString($attributes[sizeof($attributes) - 1]); if (!isset($galleryAttributes['width'])) { $galleryAttributes['width'] = $contentWidth; } if (!isset($galleryAttributes['height'])) { $galleryAttributes['height'] = 3 / 4 * $galleryAttributes['width']; } if ($galleryAttributes['width'] > $contentWidth) { $galleryAttributes['height'] = $galleryAttributes['height'] * $contentWidth / $galleryAttributes['width']; $galleryAttributes['width'] = $contentWidth; } if ($useAbsolutePath == true && $bWritedGalleryJS == false) { $bWritedGalleryJS = true; $buf .= printScript('gallery.js'); } $buf .= CRLF . '<div id="' . $cssId . '" class="tt-gallery-box">' . CRLF; $buf .= ' <script type="text/javascript">' . CRLF; $buf .= ' //<![CDATA[' . CRLF; $buf .= "\t\t\tvar {$id} = new TTGallery(\"{$cssId}\");" . CRLF; $buf .= "\t\t\t{$id}.prevText = \"" . _text('이전 이미지 보기') . "\"; " . CRLF; $buf .= "\t\t\t{$id}.nextText = \"" . _text('다음 이미지 보기') . "\"; " . CRLF; $buf .= "\t\t\t{$id}.enlargeText = \"" . _text('원본 크기로 보기') . "\"; " . CRLF; $buf .= "\t\t\t{$id}.altText = \"" . _text('갤러리 이미지') . "\"; " . CRLF; foreach ($items as $item) { $setWidth = $setHeight = 0; if (list($width, $height) = @getimagesize("{$folderPath}/{$item['0']}")) { $setWidth = $width; $setHeight = $height; if (isset($galleryAttributes['width']) && $galleryAttributes['width'] < $setWidth) { $setHeight = $setHeight * $galleryAttributes['width'] / $setWidth; $setWidth = $galleryAttributes['width']; } if (isset($galleryAttributes['height']) && $galleryAttributes['height'] < $setHeight) { $setWidth = $setWidth * $galleryAttributes['height'] / $setHeight; $setHeight = $galleryAttributes['height']; } $item[1] = str_replace("'", ''', $item[1]); $buf .= $id . '.appendImage("' . ($useAbsolutePath ? $context->getProperty('uri.service') . "/attach/{$blogid}/{$item['0']}" : "{$folderURL}/{$item['0']}") . '", "' . htmlspecialchars($item[1]) . '", ' . intval($setWidth) . ', ' . intval($setHeight) . ");"; } } $buf .= "\t\t\t{$id}.show();" . CRLF; $buf .= "\t\t//]]>" . CRLF; $buf .= ' </script>' . CRLF; $buf .= ' <noscript>' . CRLF; foreach ($items as $item) { $setWidth = $setHeight = 0; if (list($width, $height) = @getimagesize("{$folderPath}/{$item['0']}")) { $setWidth = $width; $setHeight = $height; if (isset($galleryAttributes['width']) && $galleryAttributes['width'] < $setWidth) { $setHeight = $setHeight * $galleryAttributes['width'] / $setWidth; $setWidth = $galleryAttributes['width']; } if (isset($galleryAttributes['height']) && $galleryAttributes['height'] < $setHeight) { $setWidth = $setWidth * $galleryAttributes['height'] / $setHeight; $setHeight = $galleryAttributes['height']; } $buf .= '<div class="imageblock center" style="text-align: center; clear: both;">'; if ($useAbsolutePath) { $buf .= ' <img src="' . $context->getProperty('uri.service') . "/attach/" . $blogid . "/" . $item[0] . '" width="' . intval($setWidth) . '" height="' . intval($setHeight) . '" alt="' . _text('사용자 삽입 이미지') . '" />' . CRLF; } else { $buf .= ' <img src="' . $folderURL . "/" . $item[0] . '" width="' . intval($setWidth) . '" height="' . intval($setHeight) . '" alt="' . _text('사용자 삽입 이미지') . '" />' . CRLF; } if (!empty($item[1])) { $buf .= ' <p class="cap1">' . $item[1] . '</p>' . CRLF; } $buf .= '</div>'; } } $buf .= ' </noscript>' . CRLF; $buf .= '</div>' . CRLF; } } } else { if ($attributes[0] == 'iMazing') { if (defined('__TEXTCUBE_MOBILE__') || defined('__TEXTCUBE_IPHONE__') || $bRssMode == true) { $images = array_slice($attributes, 1, count($attributes) - 3); for ($i = 0; $i < count($images); $i += 2) { if (!empty($images[$i])) { $buf .= '<div>' . FM_TTML_getAttachmentBinder($images[$i], '', $folderPath, $folderURL, 1, $useAbsolutePath) . '</div>'; } } $buf .= $attributes[count($attributes) - 1]; } else { $params = Misc::getAttributesFromString($attributes[sizeof($attributes) - 2]); $id = $entryId . $count; $imgs = array_slice($attributes, 1, count($attributes) - 3); $imgStr = ''; for ($i = 0; $i < count($imgs); $i += 2) { if ($imgs[$i] != '') { $imgStr .= $context->getProperty('service.path') . '/attach/' . $blogid . '/' . $imgs[$i]; if ($i < count($imgs) - 2) { $imgStr .= '*!'; } } } if (!empty($attributes[count($attributes) - 1])) { $caption = '<p class="cap1">' . $attributes[count($attributes) - 1] . '</p>'; } else { $caption = ''; } $buf .= '<div style="clear: both; text-align: center"><img src="' . ($useAbsolutePath ? $context->getProperty('uri.service') : $context->getProperty('service.path')) . '/resources/image/gallery/gallery_enlarge.gif" alt="' . _text('확대') . '" style="cursor:pointer" onclick="openFullScreen(\'' . $context->getProperty('service.path') . '/iMazing?d=' . urlencode($id) . '&f=' . urlencode($params['frame']) . '&t=' . urlencode($params['transition']) . '&n=' . urlencode($params['navigation']) . '&si=' . urlencode($params['slideshowinterval']) . '&p=' . urlencode($params['page']) . '&a=' . urlencode($params['align']) . '&o=' . $blogid . '&i=' . $imgStr . '\',\'' . htmlspecialchars(str_replace("'", "'", $attributes[count($attributes) - 1])) . '\',\'' . $context->getProperty('service.path') . '\')" />'; $buf .= '<div id="iMazingContainer' . $id . '" class="iMazingContainer" style="width:' . $params['width'] . 'px; height:' . $params['height'] . 'px;"></div><script type="text/javascript">//<![CDATA[' . CRLF; $buf .= 'iMazing' . $id . 'Str = getEmbedCode(\'' . $context->getProperty('service.path') . '/resources/script/gallery/iMazing/main.swf\',\'100%\',\'100%\',\'iMazing' . $id . '\',\'#FFFFFF\',"image=' . $imgStr . '&frame=' . $params['frame'] . '&transition=' . $params['transition'] . '&navigation=' . $params['navigation'] . '&slideshowInterval=' . $params['slideshowinterval'] . '&page=' . $params['page'] . '&align=' . $params['align'] . '&skinPath=' . $context->getProperty('service.path') . '/resources/script/gallery/iMazing/&","false"); writeCode(iMazing' . $id . 'Str, "iMazingContainer' . $id . '");'; $buf .= '//]]></script><noscript>'; for ($i = 0; $i < count($imgs); $i += 2) { $buf .= '<img src="' . ($useAbsolutePath ? $context->getProperty('uri.service') : $context->getProperty('service.path')) . '/attach/' . $blogid . '/' . $imgs[$i] . '" alt="" />'; } $buf .= '</noscript>'; $buf .= $caption . '</div>'; } } else { if ($attributes[0] == 'Jukebox') { if (defined('__TEXTCUBE_MOBILE__') || defined('__TEXTCUBE_IPHONE__')) { $sounds = array_slice($attributes, 1, count($attributes) - 3); for ($i = 0; $i < count($sounds); $i += 2) { if (!empty($sounds[$i])) { echo "<a href=\"{$folderURL}/{$sounds[$i]}\">{$sounds[$i]}</a><br />"; } } } else { $params = Misc::getAttributesFromString($attributes[sizeof($attributes) - 2]); foreach ($params as $key => $value) { if ($key == 'autoPlay') { unset($params['autoplay']); $params['autoplay'] = $value; } } if ($params['visible'] == 1) { $width = '250px'; $height = '27px'; } else { $width = '0px'; $height = '0px'; } $id = $entryId . $count; $imgs = array_slice($attributes, 1, count($attributes) - 3); $imgStr = ''; for ($i = 0; $i < count($imgs); $i++) { if ($imgs[$i] == '') { continue; } if ($i % 2 == 1) { $imgStr .= urlencode($imgs[$i]) . '_*'; continue; } else { if ($i < count($imgs) - 1) { $imgStr .= $context->getProperty('service.path') . "/attach/{$blogid}/" . urlencode($imgs[$i]) . '*!'; } } } if (!empty($attributes[count($attributes) - 1])) { $caption = '<div class="cap1" style="text-align: center">' . $attributes[count($attributes) - 1] . '</div>'; } else { $caption = ''; } $buf .= '<div id="jukeBox' . $id . 'Div" style="margin-left: auto; margin-right: auto; width:' . $width . '; height:' . $height . ';"><div id="jukeBoxContainer' . $id . '" style="width:' . $width . '; height:' . $height . ';"></div>'; $buf .= '<script type="text/javascript">//<![CDATA[' . CRLF; $buf .= 'writeCode(getEmbedCode(\'' . $context->getProperty('service.path') . '/resources/script/jukebox/flash/main.swf\',\'100%\',\'100%\',\'jukeBox' . $id . 'Flash\',\'#FFFFFF\',"sounds=' . $imgStr . '&autoplay=' . $params['autoplay'] . '&visible=' . $params['visible'] . '&id=' . $id . '","false"), "jukeBoxContainer' . $id . '")'; $buf .= '//]]></script><noscript>'; for ($i = 0; $i < count($imgs); $i++) { if ($i % 2 == 0) { $buf .= '<a href="' . ($useAbsolutePath ? $context->getProperty('uri.service') : $context->getProperty('service.path')) . '/attach/' . $blogid . '/' . $imgs[$i] . '">'; } else { $buf .= htmlspecialchars($imgs[$i]) . '</a><br/>'; } } $buf .= '</noscript>'; $buf .= '</div>'; } } else { $contentWidth = Misc::getContentWidth(); switch (count($attributes)) { case 4: list($newProperty, $onclickFlag) = FM_TTML_createNewProperty($attributes[1], $contentWidth, $attributes[2]); if (defined('__TEXTCUBE_MOBILE__') || defined('__TEXTCUBE_IPHONE__')) { $buf = '<div>' . FM_TTML_getAttachmentBinder($attributes[1], $newProperty, $folderPath, $folderURL, 1, $useAbsolutePath) . "</div><div>{$attributes['3']}</div>"; } else { if (trim($attributes[3]) == '') { $caption = ''; } else { $caption = '<p class="cap1">' . $attributes[3] . '</p>'; } switch ($attributes[0]) { case '1L': $prefix = '<div class="imageblock left" style="float: left; margin-right: 10px;">'; break; case '1R': $prefix = '<div class="imageblock right" style="float: right; margin-left: 10px;">'; break; case '1C': default: $prefix = '<div class="imageblock center" style="text-align: center; clear: both;">'; break; } $buf = $prefix . FM_TTML_getAttachmentBinder($attributes[1], $newProperty, $folderPath, $folderURL, 1, $useAbsolutePath, $bRssMode, $onclickFlag) . $caption . '</div>'; } break; case 7: $eachImageWidth = floor(($contentWidth - 5 * 3) / 2); list($newProperty1, $onclickFlag1) = FM_TTML_createNewProperty($attributes[1], $eachImageWidth, $attributes[2]); list($newProperty2, $onclickFlag2) = FM_TTML_createNewProperty($attributes[4], $eachImageWidth, $attributes[5]); if (defined('__TEXTCUBE_MOBILE__') || defined('__TEXTCUBE_IPHONE__')) { $buf = '<div>' . FM_TTML_getAttachmentBinder($attributes[1], $newProperty1, $folderPath, $folderURL, 1, $useAbsolutePath, $bRssMode) . "</div><div>{$attributes['3']}</div>"; $buf .= '<div>' . FM_TTML_getAttachmentBinder($attributes[4], $newProperty2, $folderPath, $folderURL, 1, $useAbsolutePath, $bRssMode) . "</div><div>{$attributes['6']}</div>"; } else { $cap1 = strlen(trim($attributes[3])) > 0 ? '<p class="cap1">' . $attributes[3] . '</p>' : ''; $cap2 = strlen(trim($attributes[6])) > 0 ? '<p class="cap1">' . $attributes[6] . '</p>' : ''; $buf = '<div class="imageblock dual" style="text-align: center;"><table cellspacing="5" cellpadding="0" border="0" style="margin: 0 auto;"><tr><td>' . FM_TTML_getAttachmentBinder($attributes[1], $newProperty1, $folderPath, $folderURL, 2, $useAbsolutePath, $bRssMode, $onclickFlag1) . $cap1 . '</td><td>' . FM_TTML_getAttachmentBinder($attributes[4], $newProperty2, $folderPath, $folderURL, 2, $useAbsolutePath, $bRssMode, $onclickFlag2) . $cap2 . '</td></tr></table></div>'; } break; case 10: $eachImageWidth = floor(($contentWidth - 5 * 4) / 3); list($newProperty1, $onclickFlag1) = FM_TTML_createNewProperty($attributes[1], $eachImageWidth, $attributes[2]); list($newProperty2, $onclickFlag2) = FM_TTML_createNewProperty($attributes[4], $eachImageWidth, $attributes[5]); list($newProperty3, $onclickFlag3) = FM_TTML_createNewProperty($attributes[7], $eachImageWidth, $attributes[8]); if (defined('__TEXTCUBE_MOBILE__') || defined('__TEXTCUBE_IPHONE__')) { $buf = '<div>' . FM_TTML_getAttachmentBinder($attributes[1], $newProperty1, $folderPath, $folderURL, 1, $useAbsolutePath, $bRssMode) . "</div><div>{$attributes['3']}</div>"; $buf .= '<div>' . FM_TTML_getAttachmentBinder($attributes[4], $newProperty2, $folderPath, $folderURL, 1, $useAbsolutePath, $bRssMode) . "</div><div>{$attributes['6']}</div>"; $buf .= '<div>' . FM_TTML_getAttachmentBinder($attributes[7], $newProperty3, $folderPath, $folderURL, 1, $useAbsolutePath, $bRssMode) . "</div><div>{$attributes['9']}</div>"; } else { $cap1 = strlen(trim($attributes[3])) > 0 ? '<p class="cap1">' . $attributes[3] . '</p>' : ''; $cap2 = strlen(trim($attributes[6])) > 0 ? '<p class="cap1">' . $attributes[6] . '</p>' : ''; $cap3 = strlen(trim($attributes[9])) > 0 ? '<p class="cap1">' . $attributes[9] . '</p>' : ''; $buf = '<div class="imageblock triple" style="text-align: center"><table cellspacing="5" cellpadding="0" border="0" style="margin: 0 auto;"><tr><td>' . FM_TTML_getAttachmentBinder($attributes[1], $newProperty1, $folderPath, $folderURL, 3, $useAbsolutePath, $bRssMode, $onclickFlag1) . $cap1 . '</td><td>' . FM_TTML_getAttachmentBinder($attributes[4], $newProperty2, $folderPath, $folderURL, 3, $useAbsolutePath, $bRssMode, $onclickFlag2) . $cap2 . '</td><td>' . FM_TTML_getAttachmentBinder($attributes[7], $newProperty3, $folderPath, $folderURL, 3, $useAbsolutePath, $bRssMode, $onclickFlag3) . $cap3 . '</td></tr></table></div>'; } break; // 어디에도 해당되지 않을 경우 임시 태그를 되살림. // 어디에도 해당되지 않을 경우 임시 태그를 되살림. default: $buf = '[###_###_###_' . implode('|', $attributes) . '_###_###_###]'; break; } } } } $view = substr($view, 0, $start) . $buf . substr($view, $end + 4); } $view = preg_replace(array("@\\[###_###_###_@", "@_###_###_###\\]@"), array('[##_', '_##]'), $view); return $view; }
function getRemoteFeed($url) { global $service, $serviceURL; $xml = fireEvent('GetRemoteFeed', null, $url); if (empty($xml)) { $request = new HTTPRequest($url); $request->referer = $serviceURL; $request->timeout = 3; if (!$request->send()) { return array(2, null, null); } $xml = $request->responseText; } $feed = array('xmlurl' => isset($request) ? $request->url : $url); $xmls = new XMLStruct(); if (!$xmls->open($xml, $service['encoding'])) { if (preg_match_all('/<link .*?rel\\s*=\\s*[\'"]?alternate.*?>/i', $xml, $matches)) { foreach ($matches[0] as $link) { $attributes = Misc::getAttributesFromString($link); if (isset($attributes['href'])) { $urlInfo = parse_url($url); $rssInfo = parse_url($attributes['href']); $rssURL = false; if (isset($rssInfo['scheme']) && $rssInfo['scheme'] == 'http') { $rssURL = $attributes['href']; } else { if (isset($rssInfo['path'])) { if ($rssInfo['path'][0] == '/') { $rssURL = "{$urlInfo['scheme']}://{$urlInfo['host']}{$rssInfo['path']}"; } else { $rssURL = "{$urlInfo['scheme']}://{$urlInfo['host']}" . (isset($urlInfo['path']) ? rtrim($urlInfo['path'], '/') : '') . '/' . $rssInfo['path']; } } } if ($rssURL && $url != $rssURL) { return getRemoteFeed($rssURL); } } } } return array(3, null, null); } if ($xmls->getAttribute('/rss', 'version')) { $feed['blogURL'] = $xmls->getValue('/rss/channel/link'); $feed['title'] = $xmls->getValue('/rss/channel/title'); $feed['description'] = $xmls->getValue('/rss/channel/description'); if (Validator::language($xmls->getValue('/rss/channel/language'))) { $feed['language'] = $xmls->getValue('/rss/channel/language'); } else { if (Validator::language($xmls->getValue('/rss/channel/dc:language'))) { $feed['language'] = $xmls->getValue('/rss/channel/dc:language'); } else { $feed['language'] = 'en-US'; } } $feed['modified'] = gmmktime(); } else { if ($xmls->doesExist('/feed')) { $feed['blogURL'] = $xmls->getAttribute('/feed/link', 'href'); $feed['title'] = $xmls->getValue('/feed/title'); $feed['description'] = $xmls->getValue('/feed/tagline'); if (Validator::language($xmls->getAttribute('/feed', 'xml:lang'))) { $feed['language'] = $xmls->getAttribute('/feed', 'xml:lang'); } else { $feed['language'] = 'en-US'; } $feed['modified'] = gmmktime(); } else { if ($xmls->getAttribute('/rdf:RDF', 'xmlns')) { if ($xmls->getAttribute('/rdf:RDF/channel/link', 'href')) { $feed['blogURL'] = $xmls->getAttribute('/rdf:RDF/channel/link', 'href'); } else { if ($xmls->getValue('/rdf:RDF/channel/link')) { $feed['blogURL'] = $xmls->getValue('/rdf:RDF/channel/link'); } else { $feed['blogURL'] = ''; } } $feed['title'] = $xmls->getValue('/rdf:RDF/channel/title'); $feed['description'] = $xmls->getValue('/rdf:RDF/channel/description'); if (Validator::language($xmls->getValue('/rdf:RDF/channel/dc:language'))) { $feed['language'] = $xmls->getValue('/rdf:RDF/channel/dc:language'); } else { if (Validator::language($xmls->getAttribute('/rdf:RDF', 'xml:lang'))) { $feed['language'] = $xmls->getAttribute('/rdf:RDF', 'xml:lang'); } else { $feed['language'] = 'en-US'; } } $feed['modified'] = gmmktime(); } else { return array(3, null, null); } } } $feed['xmlurl'] = POD::escapeString(Utils_Unicode::lessenAsEncoding(Utils_Unicode::correct($feed['xmlurl']))); $feed['blogURL'] = POD::escapeString(Utils_Unicode::lessenAsEncoding(Utils_Unicode::correct($feed['blogURL']))); $feed['title'] = POD::escapeString(Utils_Unicode::lessenAsEncoding(Utils_Unicode::correct($feed['title']))); $feed['description'] = POD::escapeString(Utils_Unicode::lessenAsEncoding(Utils_Unicode::correct(stripHTML($feed['description'])))); $feed['language'] = POD::escapeString(Utils_Unicode::lessenAsEncoding(Utils_Unicode::correct($feed['language']), 255)); return array(0, $feed, $xml); }
function resizeImageToContent($property, $originSrc, $imageWidth) { if (!is_readable($originSrc)) { return array($property, false); } list($originWidth, $originHeight, $type, $attr) = getimagesize($originSrc); $attributes = Misc::getAttributesFromString($property, false); // 단위 변환. $onclickFlag = false; if (array_key_exists('width', $attributes)) { if (preg_match('/(.+)(%?)/', $attributes['width'], $matches)) { if ($matches[2] == '%') { $attributes['width'] = round($originWidth * $matches[1] / 100); } else { $attributes['width'] = intval($matches[1]); } } } if (array_key_exists('height', $attributes)) { if (preg_match('/(.+)(%?)/', $attributes['height'], $matches)) { if ($matches[2] == '%') { $attributes['height'] = round($originHeight * $matches[1] / 100); } else { $attributes['height'] = intval($matches[1]); } } } // 가로, 세로 어느 쪽이든 0이면 이미지는 표시되지 않음. 따라서 계산할 필요 없음. if (isset($attributes['width']) && $attributes['width'] <= 0 || isset($attributes['height']) && $attributes['height'] <= 0) { return array($property, false); } // 가로만 지정된 이미지의 경우. if (isset($attributes['width']) && !isset($attributes['height'])) { // 비어있는 세로를 가로의 크기를 이용하여 계산. $attributes['height'] = floor($originHeight * $attributes['width'] / $originWidth); // 세로만 지정된 이미지의 경우. } else { if (!isset($attributes['width']) && isset($attributes['height'])) { // 비어있는 가로를 세로의 크기를 이용하여 계산. $attributes['width'] = floor($originWidth * $attributes['height'] / $originHeight); // 둘 다 지정되지 않은 이미지의 경우. } else { if (!isset($attributes['width']) && !isset($attributes['height'])) { // 둘 다 비어 있을 경우는 오리지널 사이즈로 대치. $attributes['width'] = $originWidth; $attributes['height'] = $originHeight; } } } if ($attributes['width'] > $imageWidth) { $attributes['height'] = floor($attributes['height'] * $imageWidth / $attributes['width']); $attributes['width'] = $imageWidth; } if ($attributes['width'] < $originWidth || $attributes['height'] < $originHeight) { $onclickFlag = true; } else { $onclickFlag = false; } $properties = array(); ksort($attributes); foreach ($attributes as $key => $value) { array_push($properties, "{$key}=\"{$value}\""); } return array(implode(' ', $properties), $onclickFlag); }
function getEntryContentView($blogid, $id, $content, $formatter, $keywords = array(), $type = 'Post', $useAbsolutePath = true, $bRssMode = false) { $ctx = Model_Context::getInstance(); requireModel('blog.attachment'); requireModel('blog.keyword'); requireLibrary('blog.skin'); $cacheKey = 'entry-' . $id . '-' . $type . ($bRssMode ? 'format' : 'summarize') . ($useAbsolutePath ? 'absoultePath' : 'relativePath') . (defined('__TEXTCUBE_MOBILE__') ? 'mobile' : ''); $cache = pageCache::getInstance(); $cache->reset($cacheKey); if (!defined('__TEXTCUBE_NO_ENTRY_CACHE__') && $cache->load()) { // If cached content exists. $view = $cache->contents; } else { // No cache is found. $content = fireEvent('Format' . $type . 'Content', $content, $id); $func = $bRssMode ? 'summarizeContent' : 'formatContent'; $view = $func($blogid, $id, $content, $formatter, $keywords, $useAbsolutePath); if (defined('__TEXTCUBE_MOBILE__')) { $view = stripHTML($view, array('a', 'abbr', 'acronym', 'address', 'b', 'blockquote', 'br', 'cite', 'code', 'dd', 'del', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'ins', 'kbd', 'li', 'ol', 'p', 'pre', 'q', 's', 'samp', 'span', 'strike', 'strong', 'sub', 'sup', 'u', 'ul', 'var')); } if (!$useAbsolutePath) { $view = avoidFlashBorder($view); } if (!empty($keywords) && is_array($keywords)) { $view = bindKeywords($keywords, $view); } // image resampling if (Setting::getBlogSettingGlobal('resamplingDefault') == true) { preg_match_all("@<img.+src=['\"](.+)['\"](.*)/?>@Usi", $view, $images, PREG_SET_ORDER); $view = preg_replace("@<img.+src=['\"].+['\"].*/?>@Usi", '[#####_#####_#####_image_#####_#####_#####]', $view); $contentWidth = Misc::getContentWidth(); if (count($images) > 0) { for ($i = 0; $i < count($images); $i++) { if (strtolower(Misc::getFileExtension($images[$i][1])) == 'gif') { $view = preg_replace('@\\[#####_#####_#####_image_#####_#####_#####\\]@', $images[$i][0], $view, 1); continue; } $attributes = preg_match('/(style="cursor: pointer;" onclick="open_img\\((.[^"]+)\\); return false;")/si', $images[$i][2], $matches) ? ' ' . $matches[1] : ''; $attributes .= preg_match('/(alt="([^"]*)")/si', $images[$i][2], $matches) ? ' ' . $matches[1] : ' alt="resize"'; $attributes .= preg_match('/(title="([^"]*)")/si', $images[$i][2], $matches) ? $title = ' ' . $matches[1] : ''; $tempFileName = array_pop(explode('/', $images[$i][1])); if (preg_match('/(.+)\\.w(\\d{1,})\\-h(\\d{1,})\\.(.+)/', $tempFileName, $matches)) { $tempFileName = $matches[1] . '.' . $matches[4]; } $newImage = $images[$i][0]; if (file_exists(__TEXTCUBE_ATTACH_DIR__ . "/{$blogid}/{$tempFileName}")) { $tempAttributes = Misc::getAttributesFromString($images[$i][2]); $tempOriginInfo = getimagesize(__TEXTCUBE_ATTACH_DIR__ . "/{$blogid}/{$tempFileName}"); if (isset($tempAttributes['width']) && $tempOriginInfo[0] > $tempAttributes['width']) { $image = Utils_Image::getInstance(); list($tempImageURL, $tempImageWidth, $tempImageHeight, $tempImageSrc) = $image->getImageResizer($tempFileName, array('width' => $tempAttributes['width'])); $newImage = "<img src=\"{$tempImageURL}\" width=\"{$tempImageWidth}\" height=\"{$tempImageHeight}\"{$attributes}/>"; } } $view = preg_replace('@\\[#####_#####_#####_image_#####_#####_#####\\]@', $newImage, $view, 1); } } } $cache->contents = $view; $cache->update(); } $cache->reset(); $view = fireEvent('View' . $type . 'Content', $view, $id); return $view; }