Created
June 5, 2012 22:07
-
-
Save mhulse/2878396 to your computer and use it in GitHub Desktop.
Caché DTI ContentPublisher: Tested in 7.6, 7.7.2: RG image methods...
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<csp:comment>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</csp:comment> | |
<script language="cache" method="imageUri" arguments='field:%String="", cmsStory:dt.cms.schema.CMSStory=-1' returntype="%String" procedureblock="1"> | |
set return = "" | |
if ($length(field) && $isobject(cmsStory)) { | |
set cmsPictureId = ##class(dt.cms.support.Rules).extractPicture(field, cmsStory, 0) | |
if (cmsPictureId '= -1) { | |
if ($isobject(##class(dt.cms.schema.CMSPicture).%OpenId(cmsPictureId))) { | |
set return = ##class(dt.cms.support.Rules).getSrcStream(cmsPictureId) | |
} | |
} | |
} | |
quit return | |
</script> | |
<csp:comment>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</csp:comment> | |
<script language="cache" method="picture" arguments='storyObj:dt.cms.schema.CMSStory="", label=""' returntype="dt.cms.schema.CMSPicture" procedureblock="1"> | |
/** | |
* Get picture object. | |
* | |
* @param object | |
* @param string | |
* @return object | |
*/ | |
; Not sure about max size... I would have to read the Amazon Kindle docs. | |
; Using our "990pxw" image version/item position for now. | |
; Sql provided by Scott Binns: <http://snipurl.com/v5izj> | |
; This code needs a ton of work... Not sure of the best way to handle this. | |
set (rs, sql, cmsPictureObj) = "" | |
set rs = ##class(%ResultSet).%New() | |
set sql = "SELECT distinct(CMSPicture) FROM dt_cms_schema.CMSPictureMapping WHERE cmsstory = ? AND (CMSPicture->TheCMSPictureVersion->uiLabel = '" _ label _ "')" | |
do rs.Prepare(sql) | |
if ('$$$ISERR(rs)) { | |
do rs.Execute(storyObj.%Id()) | |
while (rs.Next(rs)) { | |
if ($$$ISOK(rs)) { | |
set cmsPictureObj = ##class(dt.cms.schema.CMSPicture).%OpenId(rs.GetData(1)) | |
} | |
} | |
} | |
quit cmsPictureObj | |
</script> | |
<csp:comment>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</csp:comment> | |
<script language="cache" method="stream" arguments='cmsPictureObj:dt.cms.schema.CMSPicture=""' returntype="%String" procedureblock="1"> | |
/** | |
* Get picture stream. | |
* | |
* @param object | |
* @return string | |
*/ | |
set return = "" | |
if ($isobject(cmsPictureObj)) { | |
set return = ##class(dt.cms.support.Rules).getSrcStream(cmsPictureObj.%Id()) | |
} | |
quit return | |
</script> | |
<csp:comment>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</csp:comment> | |
<script language="cache" method="pick" arguments='pictureObj:dt.cms.schema.CMSPicture="", item:%String=""' returntype="%String" procedureblock="1"> | |
/** | |
* Get picture meta. | |
* | |
* @param object | |
* @return string | |
*/ | |
set return = "" | |
if ($isobject(pictureObj) && $length(item)) { | |
set return = ##class(dt.cms.support.Rules).getPictureItemFromCMSPictureOBJ(pictureObj, item) | |
} | |
quit return | |
</script> | |
<csp:comment> | |
<dti:story:image:caption field="990pxw" property="caption" table="fileheader" /> | |
</csp:comment> | |
<csp:comment>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</csp:comment> | |
<script language="cache" method="sizeByStream" arguments='stream:%Stream' returntype="%String" procedureblock="1"> | |
/** | |
* Get image size. | |
* | |
* @param stream | |
* @return string | |
*/ | |
; Code by Alexander Riemer | |
; http://snipurl.com/v6isu | |
; Slightly modified by Micky Hulse | |
; http://snipurl.com/v5jdn | |
set return = "" | |
if ($Isobject($get(stream))) { | |
#define READ(%chars) stream.Read(%chars) | |
#define READCHAR $ascii(stream.Read(1)) | |
set type = "???" | |
set (width, height, n, a1, a2, readto) = 0 | |
set (data, a, test) = "" | |
do stream.Rewind() | |
set data = $$$READ(4) // Read header. | |
if ($extract(data, 1, 3) = "GIF") { | |
// GIF | |
set type = "GIF" | |
do $$$READ(2) | |
set width = ..bin2Dez($reverse($$$READ(2))) | |
set height = ..bin2Dez($reverse($$$READ(2))) | |
} elseif ($extract(data, 1, 2) = "BM") { | |
// BMP | |
set type = "BMP" | |
do $$$READ(10) | |
set n = ..bin2Dez($reverse($$$READ(4))) | |
if (n = 12) { | |
set a = $$$READ(4) | |
set width = ..bin2Dez($reverse($extract(a, 1, 2))) | |
set height = ..bin2Dez($reverse($extract(a, 3, 4))) | |
} | |
if (n > 12) { | |
set a = $$$READ(8) | |
set width = ..bin2Dez($reverse($extract(a, 1, 4))) | |
set height = ..bin2Dez($reverse($extract(a, 5, 8))) | |
} | |
} elseif ($extract(data, 1, 2) = $char(255, 216)) { | |
// JPEG | |
set type = "JPEG" | |
set a1 = $ascii(data, 3) | |
set a2 = $ascii(data, 4) | |
for { | |
quit:(a1 '= 255) //' | |
if (a2 > 190) { | |
quit:($find("192,193,194,195,197,198,199,201,202,203,205,206,207", a2)) | |
} | |
set readto = ..bin2Dez($$$READ(2)) - 2 | |
do $$$READ(readto) | |
set a1 = $$$READCHAR | |
set a2 = $$$READCHAR | |
} | |
do $$$READ(3) | |
set height = ..bin2Dez($$$READ(2)) | |
set width = ..bin2Dez($$$READ(2)) | |
} elseif ($extract(data, 1, 4) = $char(137, 80, 78, 71)) { | |
// PNG | |
set type = "PNG" | |
set n = 0 | |
for { | |
do $$$READ(n + 4) | |
set n = 0 | |
for i=1:1:4 { | |
set n = n * 256 + $$$READCHAR | |
} | |
set test = $$$READ(4) | |
quit:(test = "IHDR") | |
} | |
set width = 0 | |
for i=1:1:4 { | |
set width = width * 256 + $$$READCHAR | |
} | |
set height = 0 | |
for i=1:1:4 { | |
set height = height * 256 + $$$READCHAR | |
} | |
} elseif (($extract(data) = $char(10)) && ($char(0, 2, 3, 5)[$extract(data, 2))) { | |
// PCX | |
set type = "PCX" | |
do $$$READ(4) | |
set width = ..bin2Dez($reverse($$$READ(2))) + 1 | |
set height = ..bin2Dez($reverse($$$READ(2))) + 1 | |
} | |
set return = $listbuild(type, width, height) | |
} | |
quit return | |
</script> | |
<script language="cache" method="bin2Dez" arguments='bin:%Binary' returntype="%Integer" procedureblock="1"> | |
/** | |
* Returns binary number "bin" in decimal format. | |
* | |
* @param binary | |
* @return integer | |
*/ | |
; Code by Alexander Riemer | |
; http://snipurl.com/v6isu | |
; Slightly modified by Micky Hulse | |
; http://snipurl.com/v5jdn | |
set dez = 0 | |
set len = $length(bin) | |
for i=1:1:len { | |
set dez = dez + $ascii(bin, i) * (256 ** (len - i)) | |
} | |
quit dez | |
</script> | |
<csp:comment>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</csp:comment> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment