PHP Classes

updated to use preg_match() instead of ereg()

Recommend this page to a friend!

      OpenOffice 2 HTML  >  All threads  >  updated to use preg_match() instead...  >  (Un) Subscribe thread alerts  
Subject:updated to use preg_match() instead...
Summary:now works in php7
Messages:1
Author:Uku-Kaarel Jo~esaar
Date:2015-12-28 11:41:19
 

  1. updated to use preg_match() instead...   Reply   Report abuse  
Picture of Uku-Kaarel Jo~esaar Uku-Kaarel Jo~esaar - 2015-12-28 11:41:19
<code><pre><?PHP
class office
{
public function oo_unzip($file, $save = false)
{
$img=NULL;
IF(!function_exists('zip_open'))
{
die('NO ZIP FUNCTIONS DETECTED. Do you have the PECL ZIP extensions loaded?');
}
IF($zip = zip_open($file))
{
while ($zip_entry = zip_read($zip))
{
$filename = zip_entry_name($zip_entry);
IF(zip_entry_name($zip_entry) == 'content.xml' and zip_entry_open($zip, $zip_entry, "r"))
{
$content = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
zip_entry_close($zip_entry);
}
IF(preg_match("/Pictures\//", $filename) and !preg_match("/Object/", $filename) and zip_entry_open($zip, $zip_entry, "r"))
{
$img[$filename] = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
zip_entry_close($zip_entry);
}
}
IF(isset($content))
{
IF($save == false)
{
return array($content, $img);
}
else
{
file_put_contents('content.xml', $content);
IF(is_array($img))
{
IF(!is_dir('Pictures'))
{
mkdir('Pictures');
}
foreach($img as $key => $val)
{
file_put_contents($key, $val);
}
}
}
}
}
}
public function oo_convert($content, $ver)
{
IF(strip_tags($content) == $content and preg_match("/\.xml/", $content))
{
$data = file_get_contents($content);
}
else
{
$data = $content;
}
IF($ver == 1)
{
IF(preg_match("/table:table/", $data))
{
$data = str_replace('<table:table', '<text:p text:style-name="RKRK"><table:table', $data);
$data = str_replace('</table:table>', '</table:table></text:p>', $data);
$data = preg_replace('#<table:table(.*?)</table:table>#es', "base64_encode('\\1')", $data);
}
// get styles
preg_match_all('#<office:automatic-styles>(.*?)</office:automatic-styles>#es', $data, $style);
// get data
preg_match_all('#<text:p text:style-name="([a-z A-Z_0-9]*)">(.*?)</text:p>#es', $data, $text);
// get the XML parts
$styles = $style[0];
$texts1 = $text[1];
$texts2 = $text[2];
// take out the trash
unset($data);
unset($style);
unset($text);
// make xml strings
$styles = implode('', $styles);
$styles = strtr($styles, array(':' => '_', '-' => '_', '>' => ">\n"));
$xml = simplexml_load_string($styles);
$iter = 0;
ob_start();
foreach($xml->style_style as $style)
{
// MAKE a CSS definition
IF($xml->style_style[$iter]['style_family'] == 'paragraph' or $xml->style_style[$iter]['style_family'] == 'text')
{
echo "\n.".$xml->style_style[$iter]['style_name'].' {
font-family: '.$xml->style_style[$iter]->style_properties['style_font_name'].', verdana;
font-size: '.$xml->style_style[$iter]->style_properties['fo_font_size'].';';
IF(isset($xml->style_style[$iter]->style_properties['fo_color']))
{
echo "\ncolor: ".$xml->style_style[$iter]->style_properties['fo_color'].';';
}
IF(isset($xml->style_style[$iter]->style_properties['fo_text_align']))
{
echo "\ntext-align: ".$xml->style_style[$iter]->style_properties['fo_text_align'].';';
}
IF(isset($xml->style_style[$iter]->style_properties['fo_background_color']))
{
echo "\nbackground-color: ".$xml->style_style[$iter]->style_properties['fo_background_color'].';';
}
IF($xml->style_style[$iter]->style_properties['style_text_underline'] == 'single')
{
echo "\ntext-decoration: underline;";
}
echo "\nfont-weight: ".$xml->style_style[$iter]->style_properties['fo_font_weight'].';
font-style: '.$xml->style_style[$iter]->style_properties['fo_font_style'].'
} ';
}
elseIF(isset($xml->style_style[$iter]->style_properties['style_horizontal_pos']))
{
echo "\n.".$xml->style_style[$iter]['style_name'].' {';
echo "\ntext-align: ".$xml->style_style[$iter]->style_properties['style_horizontal_pos'].';';
echo '}';
}
$iter++;
}
$r_styles = ob_get_contents();
ob_end_clean();
// take out the trash
unset($xml);
unset($styles);
unset($iter);
// Show the document
ob_start();
foreach($texts1 as $key => $val)
{
//image
IF(ereg('xlink:href="#Pictures/([a-z .A-Z_0-9]*)', $texts2[$key], $tab1) and ereg('draw:style-name="([a-zA-Z_0-9]*)"', $texts2[$key], $tab2))
{
echo '<div class="'.$tab2[1].'"><img src="Pictures/'.$tab1[1].'"></div>';
}
elseIF($val == 'RKRK')
{
$table = base64_decode($texts2[$key]);
$table = stripslashes($table);
$table = strtr($table, array('</table:table>' => '</table>', '<table:table-row>' => '<tr>', '</table:table-row>' => '</tr>', '</table:table-cell>' => '</td>', '</table:table-header-rows>' => '', '<table:table-header-rows>' => '', '>' => ">\n", '</text:p>' => ''));

preg_match_all('#table:name="([a-z A-Z_0-9]*)" table:style-name="([a-z A-Z_0-9]*)">#es', $table, $repl);
foreach($repl[0] as $val)
{
$table = str_replace($val, '<table border="1"><tr><td>', $table);
}
preg_match_all('#<text:p text:style-name="([a-z A-Z_0-9]*)">#es', $table, $repl);
foreach($repl[0] as $key => $val)
{
$table = str_replace($val, '', $table);
}
preg_match_all('#<table:table-column (.*?)">#es', $table, $repl);
foreach($repl[0] as $val)
{
$table = str_replace($val, '', $table);
}
preg_match_all('#<table:table-cell table:style-name="([\.a-z A-Z_0-9]*)" table:value-type="([a-z A-Z_0-9]*)">#es', $table, $repl);
foreach($repl[0] as $val)
{
$table = str_replace($val, '<td>', $table);
}
IF(ereg('xlink:href="Pictures/([a-z .A-Z_0-9]*)', $table, $tab1))
{
$table = str_replace('<draw:image xlink:href="Pictures/'.$tab1[1].'" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>', '<img src="Pictures/'.$tab1[1].'">', $table);
}

echo '<BR>'.$table.'<BR>';
}
// Text
else
{
echo '<div class="'.$val.'">'.$texts2[$key].'</div>';
}
}
$r_text = ob_get_contents();
ob_end_clean();
unset($texts1);
unset($texts2);
unset($tab1);
unset($tab2);
}
elseIF($ver == 2)
{
// we have tables, encode it here so all <text:p in them don't get preg_match_all few lines later
IF(preg_match("/table:table/", $data))
{
$data = str_replace('<table:table', '<text:p text:style-name="RKRK"><table:table', $data);
$data = str_replace('</table:table>', '</table:table></text:p>', $data);
// $data = preg_replace('#<table:table(.*?)</table:table>#es', "base64_encode('\\1')", $data);

$data = preg_replace_callback('#<table:table(.*?)</table:table>#s',
function($matches){return base64_encode($matches[0]);}, $data);
}
// get styles
preg_match_all('#<office:automatic-styles>(.*?)</office:automatic-styles>#es', $data, $style);
// get data
preg_match_all('#<text:p text:style-name="([a-z A-Z_0-9]*)">(.*?)</text:p>#es', $data, $text);

// get the XML parts
$styles = $style[0];
$texts1 = $text[1];
$texts2 = $text[2];
// take out the trash
unset($data);
unset($style);
unset($text);
// make xml strings
$styles = implode('', $styles);
$styles = strtr($styles, array(':' => '_', '-' => '_', '>' => ">\n"));
$xml = simplexml_load_string($styles);
$iter = 0;
ob_start();
foreach($xml->style_style as $style)
{
// MAKE a CSS definition
IF( $xml->style_style[$iter]['style_family'] == 'paragraph' or $xml->style_style[$iter]['style_family'] == 'text')
{
echo "\n.".$xml->style_style[$iter]['style_name'].' {
font-family: '.$xml->style_style[$iter]->style_text_properties['style_font_name'].', verdana;';
IF(isset($xml->style_style[$iter]->style_text_properties['fo_font_size']))
{
echo 'font-size: '.$xml->style_style[$iter]->style_text_properties['fo_font_size'].';';
}
IF(isset($xml->style_style[$iter]->style_text_properties['fo_color']))
{
echo "\ncolor: ".$xml->style_style[$iter]->style_text_properties['fo_color'].';';
}
IF(isset($xml->style_style[$iter]->style_paragraph_properties['fo_text_align']))
{
echo "\ntext-align: ".$xml->style_style[$iter]->style_paragraph_properties['fo_text_align'].';';
}
IF(isset($xml->style_style[$iter]->style_paragraph_properties['fo_background_color']))
{
echo "\nbackground-color: ".$xml->style_style[$iter]->style_paragraph_properties['fo_background_color'].';';
}
elseIF(isset($xml->style_style[$iter]->style_text_properties['fo_background_color']))
{
echo "\nbackground-color: ".$xml->style_style[$iter]->style_text_properties['fo_background_color'].';';
}
IF($xml->style_style[$iter]->style_text_properties['style_text_underline_style'] == 'solid')
{
echo "\ntext-decoration: underline;";
}
echo "\nfont-weight: ".$xml->style_style[$iter]->style_text_properties['fo_font_weight'].';';
IF(isset($xml->style_style[$iter]->style_text_properties['fo_font_style']))
{
echo 'font-style: '.$xml->style_style[$iter]->style_text_properties['fo_font_style'].'';
}
echo '} ';
}
elseIF(isset($xml->style_style[$iter]->style_graphic_properties['style_horizontal_pos']))
{
echo "\n.".$xml->style_style[$iter]['style_name'].' {';
echo "\ntext-align: ".$xml->style_style[$iter]->style_graphic_properties['style_horizontal_pos'].';';
echo '}';
}
$iter++;
}
$r_styles = ob_get_contents();
ob_end_clean();
// take out the trash
unset($xml);
unset($styles);
unset($iter);
// Show the document
ob_start();
foreach($texts1 as $key => $val)
{
//image
IF(preg_match('#xlink:href="Pictures/([a-z .A-Z_0-9]*)#', $texts2[$key], $tab1) and preg_match('#draw:style-name="([a-zA-Z_0-9]*)"#', $texts2[$key], $tab2))
{
echo '<div class="'.$tab2[1].'"><img src="Pictures/'.$tab1[1].'"></div>';
}
elseIF($val == 'RKRK')
{
$table = base64_decode($texts2[$key]);
$table = stripslashes($table);
$table = strtr($table, array('</table:table>' => '</table>', '<table:table-row>' => '<tr>', '</table:table-row>' => '</tr>', '</table:table-cell>' => '</td>', '</table:table-header-rows>' => '', '<table:table-header-rows>' => '', '>' => ">\n", '</text:p>' => ''));

preg_match_all('#table:name="([a-z A-Z_0-9]*)" table:style-name="([a-z A-Z_0-9]*)">#es', $table, $repl);
foreach($repl[0] as $val)
{
$table = str_replace($val, '<table border="1"><tr><td>', $table);
}
preg_match_all('#<text:p text:style-name="([a-z A-Z_0-9]*)">#es', $table, $repl);
foreach($repl[0] as $key => $val)
{
$table = str_replace($val, '', $table);
}
preg_match_all('#<table:table-column (.*?)">#es', $table, $repl);
foreach($repl[0] as $val)
{
$table = str_replace($val, '', $table);
}
preg_match_all('#<table:table-cell table:style-name="([\.a-z A-Z_0-9]*)" office:value-type="([a-z A-Z_0-9]*)">#es', $table, $repl);
foreach($repl[0] as $val)
{
$table = str_replace($val, '<td>', $table);
}
IF(preg_match('#xlink:href="Pictures/([a-z .A-Z_0-9]*)#', $table, $tab1))
{
$table = str_replace('<draw:image xlink:href="Pictures/'.$tab1[1].'" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>', '<img src="Pictures/'.$tab1[1].'">', $table);
}
echo '<BR>'.$table.'<BR>';
}
// Text
else
{
echo '<div class="'.$val.'">'.$texts2[$key].'</div>';
}
}
$r_text = ob_get_contents();
ob_end_clean();
unset($texts1);
unset($texts2);
unset($tab1);
unset($tab2);
}
preg_match_all('#<text:span text:style-name="([A-Z 0-9]*)">#es', $r_text, $repl);
foreach($repl[0] as $val)
{
$r_text = str_replace($val, '', $r_text);
}
$r_text = str_replace('</text:span>', '', $r_text);
IF(isset($r_styles) and isset($r_text))
{
return array($r_styles, $r_text);
}
else
{
return false;
}
}
public function oo_to_file($filename, $content, $ver)
{
$x = office::oo_convert($content, $ver);
$file = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><style>'.$x[0].'</style><body>'.$x[1].'</body></html>';
IF(is_array($x))
{
$wskaz = fopen($filename, "w");
fwrite($wskaz, $file);
fclose($wskaz);
return true;
}
else
{
return false;
}
}
public function oo_on_screen($content, $ver)
{
$x = office::oo_convert($content, $ver);
return '<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><style>'.$x[0].'</style><body>'.$x[1].'</body></html>';
}
############################################
############################################
############################################
public function abi_on_screen($filename, $patch = './')
{
$data = file_get_contents($filename);
// tekst
preg_match_all('#<section(.*?)>(.*?)</section>#es', $data, $text);
$texts = $text[2];
unset($text);
// grafika
preg_match_all('#<data>(.*?)</data>#es', $data, $extra);
$extras = $extra[0];
unset($extra);
unset($data);

$texts = implode('', $texts);
IF(is_array($extras))
{
// je&#380;eli s&#261; grafiki /za&#322;&#261;czniki to pojed&#378; dalej
$extras = implode('', $extras);
$xml = simplexml_load_string($extras);
$iter = 0;
IF(is_object($xml->d))
{
foreach($xml->d as $d)
{
IF(ereg('image/([a-z]*)', $xml->d['mime-type'], $tab))
{
$filename = md5($xml->d[$iter]['name']);
$image_content = base64_decode($xml->d[$iter]);
$images[$filename] = $patch.$filename.'.'.$tab[1];
file_put_contents($patch.$filename.'.'.$tab[1], $image_content);
$iter++;
}
}
unset($iter);
// przerabiamy wywo&#322;ania do grafik na img src
preg_match_all('#<image dataid="(.*?)" (.*?)"/>#es', $texts, $img);
foreach($img[1] as $key => $val)
{
$val = md5($val);
$texts = str_replace($img[0][$key], '<img src="'.$images[$val].'">', $texts);
}
unset($img);
}
}
// tabelki
preg_match_all('#<cell props="bot-attach:([0-9]*); left-attach:([0-9]*); right-attach:([0-9]*); top-attach:([0-9]*)">#es', $texts, $table);
$tr = 0;
foreach($table[0] as $key => $val)
{
IF($tr != $table[4][$key])
{
$texts = str_replace($val, '</tr><tr><td>', $texts);
$tr = $table[4][$key];
}
else
{
$texts = str_replace($val, '<td>', $texts);
}
}
unset($table);
unset($tr);
// wypunktowanie
preg_match_all('#<c props="([a-zA-Z0-9 _;:\-]*) list-style:Bullet List; ([a-zA-Z0-9 _;:\-]*)">(.*?)</c>#es', $texts, $li);
foreach($li[0] as $key => $val)
{
$texts = str_replace($val, '<LI>'.$li[3][$key].'</LI>', $texts);
}

preg_match_all('#<p level="(.*?) list-style:Numbered List; ([a-zA-Z0-9 _;:\-]*)">(.*?)</p>#es', $texts, $li2);
foreach($li2[0] as $key => $val)
{
$texts = str_replace($val, '<LI>'.$li2[3][$key].'</LI>', $texts);
}
unset($li2);
// czyszczenie, poprawki
$texts= preg_replace('#<field (.*?)></field>#es', '', $texts);
$texts = strtr($texts, array('<p style="Normal"></p>' => '', '<c props' => '<div style', '</c>' => '</div>', 'props="' => 'style="', '</cell>' => '</td>', '<table>' => '<table border="1" width="100%"><tr>', '</table>' => '</tr></table>', '</field>' => ''));
return '<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body>'.$texts;
}
}
?></pre></code>