<?php
// USEFUL http://support.microsoft.com/kb/270906
// ne tak dober: http://www.devx.com/asp/Article/17964/0/page/3
/*
* Created on 28.2.2009
*
* ahthor: Gorazd Veselic
*
* Za potrebe razširitev rtf
*/
require_once('class.rtf.php');
class enka_RTF extends RTF
{
/** prekodiramo šumnike
*
*/
function enkaEncode($msg){
// Ce so slucajno znaki v cirilici
if(preg_match('/[А-Яа-яЁё]/u', $msg)){
// Pretvorimo encoding (cp1251 -> cirilica)
$msg = iconv ("UTF-8", "CP1251//IGNORE", $msg);
// Zamenjamo znake v cirilici
$newMsg = "";
for($i = 0; $i < strlen($msg); $i++){
$char = "";
switch ( ord($msg[$i]) ){
case /*А*/ 192: $char = "\\u1040x"; break;
case /*а*/ 224: $char = "\\u1072x"; break;
case /*Б*/ 193: $char = "\\u1041x"; break;
case /*б*/ 225: $char = "\\u1073x"; break;
case /*В*/ 194: $char = "\\u1042x"; break;
case /*в*/ 226: $char = "\\u1074x"; break;
case /*Г*/ 195: $char = "\\u1043x"; break;
case /*г*/ 227: $char = "\\u1075x"; break;
case /*Д*/ 196: $char = "\\u1044x"; break;
case /*д*/ 228: $char = "\\u1076x"; break;
case /*Е*/ 197: $char = "\\u1045x"; break;
case /*е*/ 229: $char = "\\u1077x"; break;
case /*Ж*/ 198: $char = "\\u1046x"; break;
case /*ж*/ 230: $char = "\\u1078x"; break;
case /*З*/ 199: $char = "\\u1047x"; break;
case /*з*/ 231: $char = "\\u1079x"; break;
case /*И*/ 200: $char = "\\u1048x"; break;
case /*и*/ 232: $char = "\\u1080x"; break;
case /*Й*/ 201: $char = "\\u1049x"; break;
case /*й*/ 233: $char = "\\u1081x"; break;
case /*К*/ 202: $char = "\\u1050x"; break;
case /*к*/ 234: $char = "\\u1082x"; break;
case /*Л*/ 203: $char = "\\u1051x"; break;
case /*л*/ 235: $char = "\\u1083x"; break;
case /*М*/ 204: $char = "\\u1052x"; break;
case /*м*/ 236: $char = "\\u1084x"; break;
case /*Н*/ 205: $char = "\\u1053x"; break;
case /*н*/ 237: $char = "\\u1085x"; break;
case /*О*/ 206: $char = "\\u1054x"; break;
case /*о*/ 238: $char = "\\u1086x"; break;
case /*П*/ 207: $char = "\\u1055x"; break;
case /*п*/ 239: $char = "\\u1087x"; break;
case /*Р*/ 208: $char = "\\u1056x"; break;
case /*р*/ 240: $char = "\\u1088x"; break;
case /*С*/ 209: $char = "\\u1057x"; break;
case /*с*/ 241: $char = "\\u1089x"; break;
case /*Т*/ 210: $char = "\\u1058x"; break;
case /*т*/ 242: $char = "\\u1090x"; break;
case /*У*/ 211: $char = "\\u1059x"; break;
case /*у*/ 243: $char = "\\u1091x"; break;
case /*Ф*/ 212: $char = "\\u1060x"; break;
case /*ф*/ 244: $char = "\\u1092x"; break;
case /*Х*/ 213: $char = "\\u1061x"; break;
case /*х*/ 245: $char = "\\u1093x"; break;
case /*Ц*/ 214: $char = "\\u1062x"; break;
case /*ц*/ 246: $char = "\\u1094x"; break;
case /*Ч*/ 215: $char = "\\u1063x"; break;
case /*ч*/ 247: $char = "\\u1095x"; break;
case /*Ш*/ 216: $char = "\\u1064x"; break;
case /*ш*/ 248: $char = "\\u1096x"; break;
case /*Щ*/ 217: $char = "\\u1065x"; break;
case /*щ*/ 249: $char = "\\u1097x"; break;
case /*Ъ*/ 218: $char = "\\u1066x"; break;
case /*ъ*/ 250: $char = "\\u1098x"; break;
case /*Ы*/ 219: $char = "\\u1067x"; break;
case /*ы*/ 251: $char = "\\u1099x"; break;
case /*Ь*/ 220: $char = "\\u1068x"; break;
case /*ь*/ 252: $char = "\\u1100x"; break;
case /*Э*/ 221: $char = "\\u1069x"; break;
case /*э*/ 253: $char = "\\u1101x"; break;
case /*Ю*/ 222: $char = "\\u1070x"; break;
case /*ю*/ 254: $char = "\\u1102x"; break;
case /*Я*/ 223: $char = "\\u1071x"; break;
case /*я*/ 255: $char = "\\u1103x"; break;
default: $char = $msg[$i]; break;
}
$newMsg .= $char;
}
}
// Drugace popravljamo čšž-je
else{
// Pretvorimo encoding
$msg = iconv ("UTF-8", "CP1250", $msg);
// Zamenjamo čšž znake
$newMsg = "";
for($i = 0; $i < strlen($msg); $i++){
$char = "";
switch ( ord($msg[$i]) ){
/* TODO:
* đ -> 240
* ć -> 230
* Đ -> 208
* Ć -> 198
*/
// š -> 154 => \\u0353s
case 154: $char = "\\u0353s"; break;
// č -> 232 => \\u0269c
case 232: $char = "\\u0269s"; break;
// ž -> 158 => \\u0382z
case 158: $char = "\\u0382z"; break;
// Š -> 138 => \\u0352S
case 138: $char = "\\u0352S"; break;
// Č -> 200 => \\u0268C
case 200: $char = "\\u0268C"; break;
// Ž -> 142 => \\u0381Z
case 142: $char = "\\u0381Z"; break;
//263
case 230: $char = "\\u0263c"; break;
case 198: $char = "\\u0262C"; break;
default: $char = $msg[$i]; break;
}
$newMsg .= $char;
}
}
$msg = $newMsg;
$msg = str_replace ("š", "\u0353s", $msg);
$msg = str_replace ("Š", "\u0352S", $msg);
//$msg = str_replace (array("\'c4\u141\'8d", "\'c5\'be", "\'c5\'a1", "Č", "Ž", "Š"), array("\'e8", "\'9e", "\'9a", "\'c8", "\'8e", "\'8a"), $msg);
return $msg;
}
function add_text($msg, $align = 'left')
{
$this->align($align);
$this->MyRTF .= "{";
if (empty($this->TextDecoration))
{
$this->TextDecoration .= $this->_font($this->dfl_FontID);
$this->TextDecoration .= $this->_font_size($this->dfl_FontSize);
}
$this->MyRTF .= $this->TextDecoration;
$this->MyRTF .= "{";
$this->MyRTF .= $this->enkaEncode($msg);
$this->MyRTF .= "}} ";
$this->TextDecoration = '';
}
function draw_title($title, $align = 'left')
{
//global $this;
$this->set_font("Arial Black", 15);
$TITLE = $this->bold(1) . $this->underline(1) . $title . $this->underline(0) . $this->bold(0);
$this->new_line();
$this->add_text($TITLE, $align);
$this->new_line();
$this->new_line();
}
/** WriteTitle & author
* extending: Write the title and author for the document properties
*
*/
function WriteTitle($title = 'http://www.1ka.si/', $author = 'http://www.1ka.si/')
{
$this->MyRTF .= "{\\info{\\title ".$this->enkaEncode($title)."}{\\author ".$this->enkaEncode($author)."}}";
}
/** WriteHeader
* extending: Write the page header
*/
function WriteHeader($header = "", $align='center', $landscape=false)
{
/*$this->MyRTF .= "{\\header\\pard";
$this->align($align);
$this->MyRTF .= "{";
$this->WriteBorder('bottom');
$this->MyRTF .= "\\fs22 ".$this->enkaEncode($header)."\\par}}";*/
$extend_width = ($landscape) ? 1.5 : 1;
$this->MyRTF .= "{\\header\\fs22";
$tableHeader = '\trowd\trql\trrh400';
$table = '\clvertalc\clbrdrb\brdrs\brdrw10\cellx'.(5000*$extend_width);
$tableEnd = '\pard\intbl '.$this->enkaEncode('www.1ka.si').'\ql\cell';
$table .= '\clvertalc\clbrdrb\brdrs\brdrw10\cellx'.(9400*$extend_width);
$tableEnd .= '\pard\intbl '.$this->enkaEncode($header).'\qr\cell';
$tableEnd .= '\pard\intbl\row';
$this->MyRTF .= $this->enkaEncode($tableHeader.$table.$tableEnd);
$this->MyRTF .= "}";
}
/** WriteFooter
* extending: Write the page footer
*/
function WriteFooter($footer = "", $align='right', $landscape=false)
{
$footer = str_replace("{PAGE}", "{\\field{\\*\\fldinst PAGE}{\\fldrslt 1}}", $footer);
$footer = str_replace("{NUMPAGES}", "{\\field{\\*\\fldinst NUMPAGES}{\\fldrslt 1}}", $footer);
$date = date("d.m.Y");
/*$this->MyRTF .= "{\\footer\\pard";
$this->align($align);
$this->WriteBorder('top');
$this->MyRTF .= "\\fs18 ". $this->enkaEncode($footer) .
"\\par}";*/
$extend_width = ($landscape) ? 1.5 : 1;
$this->MyRTF .= "{\\footer\\fs18";
$tableHeader = '\trowd\trql\trrh400';
$table = '\clvertalc\clbrdrt\brdrs\brdrw10\cellx'.(5000*$extend_width);
$tableEnd = '\pard\intbl '.$this->enkaEncode($date).'\ql\cell';
$table .= '\clvertalc\clbrdrt\brdrs\brdrw10\cellx'.(9400*$extend_width);
$tableEnd .= '\pard\intbl '.$this->enkaEncode($footer).'\qr\cell';
$tableEnd .= '\pard\intbl\row';
$this->MyRTF .= $this->enkaEncode($tableHeader.$table.$tableEnd);
$this->MyRTF .= "}";
}
/** WriteBorder
* extending: draw a border
*/
function WriteBorder($borders)
{
if ( is_string ( $borders ) )
$borders = (array($borders));
if ( is_array( $borders ) )
foreach ( $borders as $border )
switch (strtolower($border))
{
case 'top': $this->MyRTF .= "\\brdrt\\brdrs\\brdrw10\\brsp100"; break;
case 'bottom': $this->MyRTF .= "\\brdrb\\brdrs\\brdrw10\\brsp100"; break;
case 'left': $this->MyRTF .= "\\brdrl\\brdrs\\brdrw10\\brsp100"; break;
case 'right': $this->MyRTF .= "\\brdrr\\brdrs\\brdrw10\\brsp100"; break;
}
}
function TextCell($text=null,$attribs=array() )
{
// print_r($attribs);
$width = ( ( $attribs['width'] ) ? $attribs['width'] : 9500 );
$height = ( ( $attribs['height'] ) ? $attribs['height'] : 1 );
$align = ( ( $attribs['align'] ) ? $attribs['align'] : 'left' );
$valign = ( ( $attribs['valign'] ) ? $attribs['valign'] : 'center' );
$tableBorder = ( ( $attribs['border'] ) ? $attribs['border'] : array() );
$colorF = ( ( $attribs['colorF'] ) ? $attribs['colorF'] : "0" );
$colorB = ( ( $attribs['colorB'] ) ? $attribs['colorB'] : "0" );
// narišemo tabelo z eno celico in okvirjem
$this->MyRTF .= "\\par\\trowd\\trgaph12\\trleft0\\trrh".( $height*250 )."\\trleft0".$this->vAlignString($valign)
.$this->TableBorder($tableBorder)."\\cellx".$width."\\pard\\intbl".(($colorB)?" \\cb".$colorB:"").(($colorF)?" \\cf".$colorF:"").$this->alignString($align)." ".( ($text) ? "{".$this->enkaEncode($text)."}" : '{}').(($colorB)?" \\cb0":"").(($colorF)?" \\cf1":"")."\\cell\\pard\\intbl\\row\\pard";
}
function TextCells($text1=null,$text2=null )
{
// print_r($attribs);
$width = ( ( $attribs['width'] ) ? $attribs['width'] : 4300 );
$height = ( ( $attribs['height'] ) ? $attribs['height'] : 1 );
$align = ( ( $attribs['align'] ) ? $attribs['align'] : 'left' );
$valign = ( ( $attribs['valign'] ) ? $attribs['valign'] : 'center' );
$tableBorder = ( ( $attribs['border'] ) ? $attribs['border'] : array() );
$colorF = ( ( $attribs['colorF'] ) ? $attribs['colorF'] : "0" );
$colorB = ( ( $attribs['colorB'] ) ? $attribs['colorB'] : "0" );
$width2 = 7000;
// narišemo tabelo z dvema celicama in okvirjem
/* $this->MyRTF .= "\\par\\trowd\\trgaph12\\trleft0\\trrh".( $height*250 )."\\trleft0".$this->vAlignString($valign)
.$this->TableBorder($tableBorder)."\\cellx".$width."\\pard\\intbl".(($colorB)?" \\cb".$colorB:"").(($colorF)?" \\cf".$colorF:"").$this->alignString($align)." ".( ($text) ? "{".$this->enkaEncode($text)."}" : '{}').(($colorB)?" \\cb0":"").(($colorF)?" \\cf1":"")."\\cell\\pard\\intbl\\row\\pard"; */
$this->MyRTF .= "\\par\\trowd\\trgaph12\\trleft0\\trrh".( $height*250 )."\\trleft0".$this->vAlignString($valign)
.$this->TableBorder($tableBorder)."\\cellx".$width."\\cellx".$width2."\\pard\\intbl".(($colorB)?" \\cb".$colorB:"").(($colorF)?" \\cf".$colorF:"").$this->alignString($align)." ".( ($text1) ? "{".$this->enkaEncode($text1).": }" : '{}').(($colorB)?" \\cb0":"").(($colorF)?" \\cf1":"")."\\cell \\pard\\intbl ".$this->enkaEncode($text2).": \\cell \\row \\pard";
//$this->MyRTF .= "\\par\\trowd \\trgaph12 \\cellx4200\\cellx7000 \\pard\\intbl ".$this->enkaEncode($text1)."\\cell \\pard\\intbl ".$this->enkaEncode($text2)."\\cell \\row";
}
/**
* Vrne text za okvirje celice v tabeli
*/
function TableBorder($borders)
{
$result = "";
if ( is_string ( $borders ) )
$borders = (array($borders));
if ( is_array( $borders ) )
foreach ( $borders as $border )
{
switch (strtolower($border))
{
case 'top': $result .= "\\clbrdrt\\brdrth"; break;
case 'bottom': $result .= "\\clbrdrb\\brdrth"; break;
case 'left': $result .= "\\clbrdrl\\brdrth"; break;
case 'right': $result .= "\\clbrdrr\\brdrth"; break;
}
}
return $result;
}
/**
* Align text and images
* (This is not intended to be used directly)
*
* @arg1 keyword (left|center|right|justify)
* @return: string
*/
function alignString($where = 'left')
{
switch ( strtolower ($where) )
{
case 'left': return "\\ql "; break;
case 'center': return "\\qc "; break;
case 'right': return "\\qr "; break;
case 'justify': return "\\qj "; break;
default: $this->alignString('left'); break;
}
}
// \vertalt Text is top-aligned (the default).
// \vertalb Text is bottom-aligned.
// \vertalc Text is centered vertically.
// \vertalj Text is justified vertically.
/**
* Align text and images
* (This is not intended to be used directly)
*
* @arg1 keyword (left|center|right|justify)
* @return: string
*/
function vAlignString( $where )
{
switch ( strtolower ($where) )
{
case 'top': return " \\clvertalt "; break;
case 'middle': return " \\clvertalc "; break;
case 'bottom': return " \\clvertalb "; break;
default: $this->vAlignString('middle'); break;
}
}
public function TableFromArray($cellWidths, $content, $prop = array())
{
$border = ( ( $prop['border'] && is_array( $prop['border'] ) )? $prop['border'] : null);
$headerBox = ( ( isset ( $prop['headerBox'] ) ) ? $prop['headerBox'] : 0 );
$headerBorder = ( ( isset ( $prop['headerBorder'] ) ) ? $prop['headerBorder'] : array('top','bottom', 'left','right') );
$spacer = ( ( isset ( $prop['spacer'] ) ) ? $prop['spacer'] : 1 );
$spacerWidth = ( ( isset ( $prop['spacerWidth'] ) ) ? $prop['spacerWidth'] : 300 );
$curWidth = 0;
$resultString = "{\\par\\fs22"
."\\trowd\\trhdr\\trgaph20\\trleft0\\trrh162";
foreach ( $content as $contentKey => $contentValue )
{
$tableHeader_base = "\\trowd\\trgaph12\\trleft0\\trrh262";
$tableHeader_width = "";
$tableHeader_title = "";
$tableHeader_finish = "\\pard\\intbl\\row";
// $curWidth = 0
$curWidth = 0;
foreach ( $contentValue as $key => $value )
{
$curentBorder = "";
if ($contentKey == 0 && $headerBox)
$curentBorder = $headerBorder;
else
$curentBorder = $border[$key];
$curWidth += ( ( $cellWidths[$key] ) ? $cellWidths[$key] : "1000");
$tableHeader_width .= $this->TableBorder($curentBorder)."\\cellx". ( $curWidth );
$tableHeader_title .= "\\pard\\intbl\\ql{".$value."}\\cell";
// dodamo spacer (razen za zadnjo celico)
if ( $spacer && $key < sizeOf($contentValue)-1)
{
$curWidth += $spacerWidth;
$tableHeader_width .= "\\cellx". ( $curWidth );
$tableHeader_title .= "\\pard\\intbl\\ql{}\\cell";
}
}
$resultString .= $tableHeader_base.$tableHeader_width.$tableHeader_title.$tableHeader_finish;
}
$resultString .= "}";
$this->MyRTF .= $this->enkaEncode($resultString);
}
public function TableFromArraySelect($cellWidths, $content, $SeznamBorders = array(), $numOfRows, $prop = array())
{
$border = ( ( $prop['border'] && is_array( $prop['border'] ) )? $prop['border'] : null);
$headerBox = ( ( isset ( $prop['headerBox'] ) ) ? $prop['headerBox'] : 0 );
$headerBorder = ( ( isset ( $prop['headerBorder'] ) ) ? $prop['headerBorder'] : array('top','bottom', 'left','right') );
$spacer = ( ( isset ( $prop['spacer'] ) ) ? $prop['spacer'] : 1 );
$spacerWidth = ( ( isset ( $prop['spacerWidth'] ) ) ? $prop['spacerWidth'] : 300 );
$curWidth = 0;
$keyBorder = 0;
$resultString = "{\\par\\fs22"
."\\trowd\\trhdr\\trgaph20\\trleft0\\trrh162";
foreach ( $content as $contentKey => $contentValue )
{
$tableHeader_base = "\\trowd\\trgaph12\\trleft0\\trrh262";
$tableHeader_width = "";
$tableHeader_title = "";
$tableHeader_finish = "\\pard\\intbl\\row";
// $curWidth = 0
$curWidth = 0;
foreach ( $contentValue as $key => $value )
{
$curentBorder = "";
if ($contentKey == 0 && $headerBox)
$curentBorder = $headerBorder;
else
$curentBorder = $SeznamBorders[$keyBorder];
$curWidth += ( ( $cellWidths[$key] ) ? $cellWidths[$key] : "1000");
//$tableHeader_width .= $this->TableBorder($curentBorder)."\\cellx". ( $curWidth );
//$tableHeader_title .= "\\pard\\intbl\\ql{".$value."}\\cell";
$tableHeader_width .= $this->TableBorder($curentBorder)."\\cellx". ( $curWidth )."\\cellx".( $curWidth + 300);
if($keyBorder == 0){ //ce je prva vrstica v tabeli
$tableHeader_title .= "\\pard\\intbl{".$value."}\\cell \\pard\\intbl{".$this->ImageToString("arrowUpSelect.png", "15")."}\\cell";
}elseif($keyBorder == ($numOfRows-1)){ //ce je zadnja vrstica v tabeli
$tableHeader_title .= "\\pard\\intbl{".$value."}\\cell \\pard\\intbl{".$this->ImageToString("arrowDownSelect.png", "15")."}\\cell";
}else{ //ce je vrstica, ki ni ne zadnja vrstica in ne prva v tabeli
$tableHeader_title .= "\\pard\\intbl{".$value."}\\cell \\pard\\intbl\\cell";
}
// dodamo spacer (razen za zadnjo celico)
if ( $spacer && $key < sizeOf($contentValue)-1)
{
$curWidth += $spacerWidth;
$tableHeader_width .= "\\cellx". ( $curWidth );
$tableHeader_title .= "\\pard\\intbl\\ql{}\\cell";
}
$keyBorder++;
}
$resultString .= $tableHeader_base.$tableHeader_width.$tableHeader_title.$tableHeader_finish;
}
$resultString .= "}";
$this->MyRTF .= $this->enkaEncode($resultString);
}
public function TableFromArrayDragDrop($cellWidths, $content, $SeznamBorders = array(), $numOfRows, $prop = array())
{
$border = ( ( $prop['border'] && is_array( $prop['border'] ) )? $prop['border'] : null);
$headerBox = ( ( isset ( $prop['headerBox'] ) ) ? $prop['headerBox'] : 0 );
$headerBorder = ( ( isset ( $prop['headerBorder'] ) ) ? $prop['headerBorder'] : array('top','bottom', 'left','right') );
$spacer = ( ( isset ( $prop['spacer'] ) ) ? $prop['spacer'] : 1 );
$spacerWidth = ( ( isset ( $prop['spacerWidth'] ) ) ? $prop['spacerWidth'] : 300 );
$curWidth = 0;
$width1 = 500;
$PredefinedSeznamBorders[0] = array('top', 'left', 'right');
$PredefinedSeznamBorders[1] = array('left', 'right');
$PredefinedSeznamBorders[2] = array('right', 'left', 'bottom');
$PredefinedSeznamBorders[3] = array('top', 'left', 'right', 'bottom');
$keyBorder = 0;
$resultString = "{\\par\\fs22"
."\\trowd\\trhdr\\trgaph20\\trleft0\\trrh162";
foreach ( $content as $contentKey => $contentValue )
{
$tableHeader_base = "\\trowd\\trgaph12\\trleft0\\trrh262";
$tableHeader_width = "";
$tableHeader_title = "";
$tableHeader_finish = "\\pard\\intbl\\row";
// $curWidth = 0
$curWidth = 0;
//$tableBlankCells = "\\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell";
$numOfCells = 6;
$tableBlankCells = "";
$tableBlankCellsArrow = "";
for($i = 0; $i<$numOfCells; $i++){
$tableBlankCells .= "\\pard\\intbl\\cell ";
/* if($i == 3){
$tableBlankCellsArrow .="\\pard\\intbl{".$this->ImageToString("arrow.png", "100")."}\\cell ";
}else{
$tableBlankCellsArrow .="\\pard\\intbl\\cell ";
} */
}
//$tableBlankCellsArrow = "\\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl{".$this->ImageToString("arrow.png", "100")."}\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell ";
$tableBlank_width = "";
foreach ( $contentValue as $key => $value )
{
$curentBorder = "";
if ($contentKey == 0 && $headerBox)
$curentBorder = $headerBorder;
else
$curentBorder = $SeznamBorders[$keyBorder];
$curWidth += ( ( $cellWidths[$key] ) ? $cellWidths[$key] : "1000");
$tableBlank_width = "\\cellx".($width1)."\\cellx". ( $width1 + $curWidth )."\\cellx".( $width1 + $curWidth + 150)."\\cellx".( $width1 + $curWidth + 150 + 750)."\\cellx".( $width1 + $curWidth + 150 + 750 + 150).$this->TableBorder($PredefinedSeznamBorders[1])."\\cellx".( $width1 + $curWidth + 150 + 750 + 150 + $curWidth);
if($keyBorder == 0){ //ce je prva vrstica v tabeli
$tableHeader_width .= "\\cellx".($width1)." ".$this->TableBorder($PredefinedSeznamBorders[3])."\\cellx". ( $width1 + $curWidth )."\\cellx".( $width1 + $curWidth + 150)."\\cellx".( $width1 + $curWidth + 150 + 750)."\\cellx".( $width1 + $curWidth + 150 + 750 + 150).$this->TableBorder($PredefinedSeznamBorders[0])."\\cellx".( $width1 + $curWidth + 150 + 750 + 150 + $curWidth);
$tableHeader_title .= "\\pard\\intbl\\cell \\pard\\intbl{".$value."}\\cell \\pard\\intbl\\cell \\pard\\intbl{".$this->ImageToString("arrow.png", "100")."}\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell";
//$tableHeader_title .= "\\pard\\intbl\\cell \\pard\\intbl{".$value."}\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell";
}elseif($keyBorder == ($numOfRows-1)){ //ce je zadnja vrstica v tabeli
//$tableHeader_width .= "\\cellx".($width1)." ".$this->TableBorder($PredefinedSeznamBorders[3])."\\cellx". ( $width1 + $curWidth )."\\cellx".( $width1 + $curWidth + 300).$this->TableBorder($PredefinedSeznamBorders[2])."\\cellx".( $width1 + $curWidth + 300 + $curWidth);
$tableHeader_width .= "\\cellx".($width1)." ".$this->TableBorder($PredefinedSeznamBorders[3])."\\cellx". ( $width1 + $curWidth )."\\cellx".( $width1 + $curWidth + 150)."\\cellx".( $width1 + $curWidth + 150 + 750)."\\cellx".( $width1 + $curWidth + 150 + 750 + 150).$this->TableBorder($PredefinedSeznamBorders[2])."\\cellx".( $width1 + $curWidth + 150 + 750 + 150 + $curWidth);
$tableHeader_title .= "\\pard\\intbl\\cell \\pard\\intbl{".$value."}\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell";
}else{ //ce je vrstica, ki ni ne zadnja vrstica in ne prva v tabeli
//$tableHeader_width .= "\\cellx".($width1)." ".$this->TableBorder($PredefinedSeznamBorders[3])."\\cellx". ( $width1 + $curWidth )."\\cellx".( $width1 + $curWidth + 300).$this->TableBorder($PredefinedSeznamBorders[1])."\\cellx".( $width1 + $curWidth + 300 + $curWidth);
$tableHeader_width .= "\\cellx".($width1)." ".$this->TableBorder($PredefinedSeznamBorders[3])."\\cellx". ( $width1 + $curWidth )."\\cellx".( $width1 + $curWidth + 150)."\\cellx".( $width1 + $curWidth + 150 + 750)."\\cellx".( $width1 + $curWidth + 150 + 750 + 150).$this->TableBorder($PredefinedSeznamBorders[1])."\\cellx".( $width1 + $curWidth + 150 + 750 + 150 + $curWidth);
//$tableHeader_title .= "\\pard\\intbl\\cell \\pard\\intbl{".$value."}\\cell \\pard\\intbl\\cell \\pard\\intbl{".$value."}\\cell";
$tableHeader_title .= "\\pard\\intbl\\cell \\pard\\intbl{".$value."}\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell";
}
// dodamo spacer (razen za zadnjo celico)
if ( $spacer && $key < sizeOf($contentValue)-1)
{
$curWidth += $spacerWidth;
$tableHeader_width .= "\\cellx". ( $curWidth );
$tableHeader_title .= "\\pard\\intbl\\ql{}\\cell";
}
if($keyBorder != ($numOfRows-1)){ //ce ni zadnja vrstica v tabeli
$tableHeader_title .= $tableHeader_finish.$tableHeader_base.$tableBlank_width.$tableBlankCells;
}
/* if($keyBorder != ($numOfRows-1) && $keyBorder != 1){ //ce ni zadnja vrstica v tabeli
$tableHeader_title .= $tableHeader_finish.$tableHeader_base.$tableBlank_width.$tableBlankCells;
}elseif($keyBorder == 1){
$tableHeader_title .= $tableHeader_finish.$tableHeader_base.$tableBlank_width.$tableBlankCellsArrow;
} */
$keyBorder++;
}
$resultString .= $tableHeader_base.$tableHeader_width.$tableHeader_title.$tableHeader_finish;
}
$resultString .= "}";
$this->MyRTF .= $this->enkaEncode($resultString);
}
//public function TableFromArrayDragDropGrid($cellWidths, $content, $SeznamBorders = array(), $numOfRows, $prop = array())
public function TableFromArrayDragDropGrid($cellWidths, $content, $numOfRows, $prop = array())
{
$border = ( ( $prop['border'] && is_array( $prop['border'] ) )? $prop['border'] : null);
$headerBox = ( ( isset ( $prop['headerBox'] ) ) ? $prop['headerBox'] : 0 );
$headerBorder = ( ( isset ( $prop['headerBorder'] ) ) ? $prop['headerBorder'] : array('top','bottom', 'left','right') );
$spacer = ( ( isset ( $prop['spacer'] ) ) ? $prop['spacer'] : 1 );
$spacerWidth = ( ( isset ( $prop['spacerWidth'] ) ) ? $prop['spacerWidth'] : 300 );
$curWidth = 0;
$width1 = 500;
$PredefinedSeznamBorders[0] = array('top', 'left', 'right');
$PredefinedSeznamBorders[1] = array('left', 'right');
$PredefinedSeznamBorders[2] = array('right', 'left', 'bottom');
$PredefinedSeznamBorders[3] = array('top', 'left', 'right', 'bottom');
$keyBorder = 0;
$resultString = "{\\par\\fs22"
."\\trowd\\trhdr\\trgaph20\\trleft0\\trrh162";
foreach ( $content as $contentKey => $contentValue )
{
$tableHeader_base = "\\trowd\\trgaph12\\trleft0\\trrh262";
$tableHeader_width = "";
$tableHeader_title = "";
$tableHeader_finish = "\\pard\\intbl\\row";
// $curWidth = 0
$curWidth = 0;
//$tableBlankCells = "\\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell";
$numOfCells = 6;
$tableBlankCells = "";
$tableBlankCellsArrow = "";
for($i = 0; $i<$numOfCells; $i++){
$tableBlankCells .= "\\pard\\intbl\\cell ";
/* if($i == 3){
$tableBlankCellsArrow .="\\pard\\intbl{".$this->ImageToString("arrow.png", "100")."}\\cell ";
}else{
$tableBlankCellsArrow .="\\pard\\intbl\\cell ";
} */
}
//$tableBlankCellsArrow = "\\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl{".$this->ImageToString("arrow.png", "100")."}\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell ";
$tableBlank_width = "";
//foreach ( $contentValue as $key => $value )
for($z = 0; $z < $numOfRows; $z++)
{
$curentBorder = "";
if ($contentKey == 0 && $headerBox)
$curentBorder = $headerBorder;
else
$curentBorder = $SeznamBorders[$keyBorder];
$curWidth += ( ( $cellWidths[$z] ) ? $cellWidths[$z] : "1000");
$tableBlank_width = "\\cellx".($width1)."\\cellx". ( $width1 + $curWidth )."\\cellx".( $width1 + $curWidth + 150)."\\cellx".( $width1 + $curWidth + 150 + 750)."\\cellx".( $width1 + $curWidth + 150 + 750 + 150).$this->TableBorder($PredefinedSeznamBorders[1])."\\cellx".( $width1 + $curWidth + 150 + 750 + 150 + $curWidth);
if($keyBorder == 0){ //ce je prva vrstica v tabeli
$tableHeader_width .= "\\cellx".($width1)." ".$this->TableBorder($PredefinedSeznamBorders[3])."\\cellx". ( $width1 + $curWidth )."\\cellx".( $width1 + $curWidth + 150)."\\cellx".( $width1 + $curWidth + 150 + 750)."\\cellx".( $width1 + $curWidth + 150 + 750 + 150).$this->TableBorder($PredefinedSeznamBorders[0])."\\cellx".( $width1 + $curWidth + 150 + 750 + 150 + $curWidth);
$tableHeader_title .= "\\pard\\intbl\\cell \\pard\\intbl{".$content[$z]."}\\cell \\pard\\intbl\\cell \\pard\\intbl{".$this->ImageToString("arrow.png", "100")."}\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell";
//$tableHeader_title .= "\\pard\\intbl\\cell \\pard\\intbl{".$value."}\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell";
}elseif($keyBorder == ($numOfRows-1)){ //ce je zadnja vrstica v tabeli
//$tableHeader_width .= "\\cellx".($width1)." ".$this->TableBorder($PredefinedSeznamBorders[3])."\\cellx". ( $width1 + $curWidth )."\\cellx".( $width1 + $curWidth + 300).$this->TableBorder($PredefinedSeznamBorders[2])."\\cellx".( $width1 + $curWidth + 300 + $curWidth);
$tableHeader_width .= "\\cellx".($width1)." ".$this->TableBorder($PredefinedSeznamBorders[3])."\\cellx". ( $width1 + $curWidth )."\\cellx".( $width1 + $curWidth + 150)."\\cellx".( $width1 + $curWidth + 150 + 750)."\\cellx".( $width1 + $curWidth + 150 + 750 + 150).$this->TableBorder($PredefinedSeznamBorders[2])."\\cellx".( $width1 + $curWidth + 150 + 750 + 150 + $curWidth);
$tableHeader_title .= "\\pard\\intbl\\cell \\pard\\intbl{".$content[$z]."}\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell";
}else{ //ce je vrstica, ki ni ne zadnja vrstica in ne prva v tabeli
//$tableHeader_width .= "\\cellx".($width1)." ".$this->TableBorder($PredefinedSeznamBorders[3])."\\cellx". ( $width1 + $curWidth )."\\cellx".( $width1 + $curWidth + 300).$this->TableBorder($PredefinedSeznamBorders[1])."\\cellx".( $width1 + $curWidth + 300 + $curWidth);
$tableHeader_width .= "\\cellx".($width1)." ".$this->TableBorder($PredefinedSeznamBorders[3])."\\cellx". ( $width1 + $curWidth )."\\cellx".( $width1 + $curWidth + 150)."\\cellx".( $width1 + $curWidth + 150 + 750)."\\cellx".( $width1 + $curWidth + 150 + 750 + 150).$this->TableBorder($PredefinedSeznamBorders[1])."\\cellx".( $width1 + $curWidth + 150 + 750 + 150 + $curWidth);
//$tableHeader_title .= "\\pard\\intbl\\cell \\pard\\intbl{".$value."}\\cell \\pard\\intbl\\cell \\pard\\intbl{".$value."}\\cell";
$tableHeader_title .= "\\pard\\intbl\\cell \\pard\\intbl{".$content[$z]."}\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell";
}
// dodamo spacer (razen za zadnjo celico)
if ( $spacer && $z < sizeOf($content)-1)
{
$curWidth += $spacerWidth;
$tableHeader_width .= "\\cellx". ( $curWidth );
$tableHeader_title .= "\\pard\\intbl\\ql{}\\cell";
}
if($keyBorder != ($numOfRows-1)){ //ce ni zadnja vrstica v tabeli
$tableHeader_title .= $tableHeader_finish.$tableHeader_base.$tableBlank_width.$tableBlankCells;
}
/* if($keyBorder != ($numOfRows-1) && $keyBorder != 1){ //ce ni zadnja vrstica v tabeli
$tableHeader_title .= $tableHeader_finish.$tableHeader_base.$tableBlank_width.$tableBlankCells;
}elseif($keyBorder == 1){
$tableHeader_title .= $tableHeader_finish.$tableHeader_base.$tableBlank_width.$tableBlankCellsArrow;
} */
$keyBorder++;
}
$resultString .= $tableHeader_base.$tableHeader_width.$tableHeader_title.$tableHeader_finish;
}
$resultString .= "}";
$this->MyRTF .= $this->enkaEncode($resultString);
}
public function TableSNPodvprasanje($colHeaders, $rowHeaders, $prop = array())
{
$cols = sizeOf($colHeaders);
$rows = sizeOf($rowHeaders)+1;
$type = ( ( isset ( $prop['type'] ) ) ? $prop['type'] : 'box' ); //radio, povezave, def=box
// kalkulacije širin
$fullWidth = 9500;
$spaceWidth = 300;
$spacesWidth = round($spaceWidth * ($cols-1));
$cellWidth = round(($fullWidth - $spacesWidth) / $cols);
$resultString = "{\\par\\fs22"
."\\trowd\\trhdr\\trgaph20\\trleft0\\trrh162";
for ($i = 0; $i < $rows; $i++)
{
$tableHeader_base = "\\trowd\\trgaph12\\trleft0\\trrh262";
$tableHeader_width = "";
$tableHeader_title = "";
$tableHeader_finish = "\\pard\\intbl\\row";
$curWidth = 0;
$index=0;
for ($j = 0; $j < $cols; $j++)
{
$border = "";
$value = "";
$align = "\\ql"; // left
if ($i == 0)
{
$value = $colHeaders[$j];
if ( $j != 0 )
$border = "bottom";
$align = "\\qc";
}
else if ( $j == 0)
{
$value = $rowHeaders[$i-1];
if ( $type == 'povezave')
$border = "bottom";
}
else
{
// v odvisnosti od tipa prikažemo
switch ( $type )
{
case 'radio': // radio button
$value = $this->ImageToString( "radio.png", "15");
break;
case 'povezave': // radio button
if ( $j > $i )
$value =$this->ImageToString( "checkbox.png", "15");
// else $value = "";
break;
default: // box
$value =$this->ImageToString( "checkbox.png", "15");
break;
}
// $value = "v";
$align="\\qc";
}
$curWidth += $cellWidth;
$tableHeader_width .= $this->TableBorder($border)."\\cellx". ( $curWidth );
$tableHeader_title .= "\\pard\\intbl".$align."{".$value."}\\cell";
// dodamo spacer
if ($j < $cols-1)
{
$curWidth += $spaceWidth;
$tableHeader_width .= "\\cellx". ( $curWidth ); // space
$tableHeader_title .= "\\pard\\intbl\\ql{ }\\cell";
}
$index++;
}
$resultString .= $tableHeader_base.$tableHeader_width.$tableHeader_title.$tableHeader_finish;
}
$resultString .= "}";
// print_r($resultString);
$this->MyRTF .= $this->enkaEncode($resultString);
}
/**
* Insert radio/checkbox image (it took it from folder: $site_path.'admin/survey/img_0/')
*
* @arg1 string (image filename)
* @arg2 int (int 1-100)
* @arg3 keyword (left|center|right|justify)
* @return void
*/
function ImageToString($image, $ratio, $align = 'left')
{
global $site_path;
$file = @file_get_contents($site_path.'admin/survey/img_0/'.$image);
if (empty($file)) {
print_r("Error geting file:".$site_path.'admin/survey/img_0/'.$image);
return NULL;
}
$result = $this->alignString;
$result .= "{";
$result .= "\\pict\\jpegblip\\picscalex". $ratio ."\\picscaley". $ratio ."\\bliptag132000428 ";
$result .= trim(bin2hex($file));
$result .= "\n}\n";
return $result;
}
// Pretvori html v rtf string
function HTMLtoRTF($string) {
/*if(preg_match("/<UL>(.*?)<\/UL>/mi", $string) || preg_match("/<ul>(.*?)<\/ul>/mi", $string)
|| preg_match("/<OL>(.*?)<\/OL>/mi", $string) || preg_match("/<ol>(.*?)<\/ol>/mi", $string)) {*/
$string = str_replace("<UL>", "", $string);
$string = str_replace("<ul>", "", $string);
$string = str_replace("</UL>", "", $string);
$string = str_replace("</ul>", "", $string);
$string = str_replace("<OL>", "", $string);
$string = str_replace("<ol>", "", $string);
$string = str_replace("</OL>", "", $string);
$string = str_replace("</ol>", "", $string);
$string = preg_replace("/<LI>(.*?)<\/LI>/mi", "\\f3\\'B7\\tab\\f{$this->dfl_FontID} \\1\\par", $string);
/*}*/
$string = preg_replace("/<P>(.*?)<\/P>/mi", "\\1\\par ", $string);
$string = preg_replace("/<STRONG>(.*?)<\/STRONG>/mi", "\\b \\1\\b0 ", $string);
$string = preg_replace("/<B>(.*?)<\/B>/mi", "\\b \\1\\b0 ", $string);
$string = preg_replace("/<EM>(.*?)<\/EM>/mi", "\\i \\1\\i0 ", $string);
$string = preg_replace("/<U>(.*?)<\/U>/mi", "\\ul \\1\\ul0 ", $string);
$string = preg_replace("/<STRIKE>(.*?)<\/STRIKE>/mi", "\\strike \\1\\strike0 ", $string);
$string = preg_replace("/<SUB>(.*?)<\/SUB>/mi", "{\\sub \\1}", $string);
$string = preg_replace("/<SUP>(.*?)<\/SUP>/mi", "{\\super \\1}", $string);
$string = preg_replace("/<H1>(.*?)<\/H1>/mi", "\\fs48\\b \\1\\b0\\fs{$this->_font_size($this->dfl_FontSize)}\\par ", $string);
$string = preg_replace("/<H2>(.*?)<\/H2>/mi", "\\fs36\\b \\1\\b0\\fs{$this->_font_size($this->dfl_FontSize)}\\par ", $string);
$string = preg_replace("/<H3>(.*?)<\/H3>/mi", "\\fs27\\b \\1\\b0\\fs{$this->_font_size($this->dfl_FontSize)}\\par ", $string);
$string = preg_replace("/<HR(.*?)>/i", "\\brdrb\\brdrs\\brdrw30\\brsp20 \\pard\\par ", $string);
$string = str_replace("<BR>", "\\par ", $string);
$string = str_replace("<TAB>", "\\tab ", $string);
//$string = $this->nl2par($string);
// Porezemo zadnji line break zaradi
$string = substr($string, 0, -2);
return $string;
}
// Convert newlines into \par
function nl2par($text) {
$text = str_replace("\n", "\\par ", $text);
return $text;
}
public function prepareHeatmapImage($data4Coords, $backgroundImg, $latInMm, $lngInMm, $ImgWidth, $ImgHeight, $heatmap_click_size, $heatmap_click_color, $heatmap_click_shape, $spr_id, $bgImageType, $uploadDir){
//global $site_path;
//define('UPLOAD_DIR', $site_path.'main/survey/uploads/');
#izris tock na sliko######################################################################################
switch ($bgImageType){
case 'jpg':
$backgroundImg = imagecreatefromjpeg($backgroundImg); //nalozena slika ozadja
break;
case 'png':
$backgroundImg = imagecreatefrompng($backgroundImg); //nalozena slika ozadja
break;
case 'gif':
$backgroundImg = imagecreatefromgif($backgroundImg); //nalozena slika ozadja
break;
}
$orig_width = imagesx($backgroundImg);
$orig_height = imagesy($backgroundImg);
$backgroundImgResized = imagecreatetruecolor($ImgWidth, $ImgHeight); //ustvari sliko ustrezne velikosti
//imagecopyresized($backgroundImgResized, $backgroundImg, 0, 0, 0, 0, $ImgWidth, $ImgHeight, $orig_width, $orig_height); //kopiraj original (vecjo) sliko v sliko ustrezne velikosti, ki jo je izbral uporabnik
imagecopyresampled($backgroundImgResized, $backgroundImg, 0, 0, 0, 0, $ImgWidth, $ImgHeight, $orig_width, $orig_height); //kopiraj original (vecjo) sliko v sliko ustrezne velikosti, ki jo je izbral uporabnik
// barva oblike klika - pride v taki obliki #f26970
$barva = substr($heatmap_click_color, 1); //f26970
$rHex = '0x'.str_replace(substr($barva, 2),"",$barva); //f2
//error_log("rHex: $rHex");
$barvatmp = substr($barva, 2); //6970
$barvatmpG = str_replace(substr($barvatmp, 2),"",$barvatmp); //69
$gHex = '0x'.$barvatmpG;
//error_log("gHex: $gHex");
$barvatmpB = substr($barvatmp, 2); //70
$bHex = '0x'.$barvatmpB;
//error_log("bHex: $bHex");
$barvaOblike = imagecolorallocate($backgroundImgResized, $rHex, $gHex, $bHex);
// barva oblike klika - konec
// narisi obliko klika
foreach($data4Coords as $row){ //za vsako klikano tocko
if($heatmap_click_shape == 1){ //krog
imagefilledarc($backgroundImgResized, $row['lat'], $row['lng'], $heatmap_click_size*2, $heatmap_click_size*2, 0, 360, $barvaOblike, IMG_ARC_PIE);
}elseif($heatmap_click_shape == 2){ //kvadrat
$x1 = $row['lat'] - $heatmap_click_size/2;
$y1 = $row['lng'] - $heatmap_click_size/2;
$x2 = $row['lat'] + $heatmap_click_size/2;
$y2 = $row['lng'] + $heatmap_click_size/2;
imagefilledrectangle($backgroundImgResized, $x1, $y1, $x2, $y2, $barvaOblike);
}
}
// narisi obliko klika - konec
//$file = UPLOAD_DIR . $heatmapId . '.png';
//$file = UPLOAD_DIR . 'test_'.$spr_id.'.png';
$file = $uploadDir . 'results_'.$spr_id.'.png';
imagepng($backgroundImgResized, $file, 6, NULL);
imagedestroy($backgroundImgResized);
return $file;
#izris tock na sliko######################################################################################konec
}
}
?>