a:11:{s:4:"name";s:17:"ClassConmunixWiki";s:7:"version";s:7:"1.0-dev";s:2:"op";s:1:"0";s:3:"ini";s:0:"";s:4:"code";s:2982:"<?php

	class Wiki {

		public function parser_callback($str)
		{
			return $str;
			#preg_replace_callback();
		}

        	public function parser($str)
		{
			global $memcache;

			$cid = md5($str);
			$old = trim($memcache->get(CMSID.'ClassConmunixWiki'.$cid));

			if(!empty($old))
				return $old;

            		$search = array(
				"/\[link (.*?)\]/is",
				"/\[h4\](.*?)\[\/h4\]/is",
				"/\[h5\](.*?)\[\/h5\]/is",
				"/\[h6\](.*?)\[\/h6\]/is",
				"/\[p\](.*?)\[\/p\]/is",
				"/\[pre\](.*?)\[\/pre\]/is",
				"/\[code\](.*?)\[\/code\]/is",
				"/\[url\](.*?)\[\/url\]/is",
				"/\[color (.*?)\](.*?)\[\/color\]/is",
				"/\[ol\](.*?)\[\/ol\]/is",
				"/\[ul\](.*?)\[\/ul\]/is",
				"/\[li\](.*?)\[\/li\]/is",
				"/\[\*\](.*?)\[\/\*\]/is",
				"/\[hr\]/is",
				"/\[br\]/is",
            		);

            		$replace = array(
				'<a href="./wiki,$1.html">$1</a><sup style="color:gray;">W</sup>',
				'<h4>$1</h4>',
				'<h5>$1</h5>',
				'<h6>$1</h6>',
				'<p>$1</p>',
				'<pre>$1</pre>',
				'<pre>$1</pre>',
				'<a target="_blank" rel="nofollow" href="$1">$1</a>',
				'<span style="color:$1">$2</span>',
				'<ol>$1</ol>',
				'<ul>$1</ul>',
				'<li>$1</li>',
				'<!-- $1 -->',
				'<hr />',
				'<br />',
            		);

            		$str = preg_replace($search, $replace, $str);
			$str = self::parser_callback($str);

			$memcache->set(CMSID.'ClassConmunixWiki'.$cid, $str, 0, 0);

            		return $str;
        	}

        	public function cleaner($str)
		{
            		return trim(strip_tags($str));
        	}

        	public function title($str)
		{
            		return str_replace(" ", "-", $str);
        	}

                public function extension($str)
                {
                        return trim(strtolower(end(explode('.',$str))));
                }

		public function thumbnail($path,$src,$dest,$width,$height,$force='')
		{
			$extension = self::extension($src);
			$destination = $path.$dest;

			list($getwidth,$getheight) = getimagesize($path.$src);

			if(file_exists($destination)) {
				return $destination;
			}

			if($extension=='jpg' or $extension=='jpeg')
				$image = imagecreatefromjpeg($path.$src);
			elseif($extension=='png')
				$image = imagecreatefrompng($path.$src);
			elseif($extension=='gif')
				$image = imagecreatefromgif($path.$src);

			$newimage = imagecreatetruecolor($width,$height);
			imagecopyresampled($newimage,$image,0,0,0,0,$width,$height,$getwidth,$getheight);

			if($extension=='jpg' or $extension=='jpeg' or $force=='jpg')
				imagejpeg($newimage,$destination,100);
			elseif($extension=='png' or $force=='png')
                                imagepng($newimage,$destination);
			elseif($extension=='gif' or $force=='png')
				imagegif($newimage,$destination);

			return $destination;

		}

	}

	$smarty->register_modifier('wikititle', array('Wiki', 'title'));

?>";s:11:"description";s:0:"";s:13:"documentation";s:41:"Es ist noch keine Dokumentation vorhanden";s:5:"stamp";s:10:"1252906014";s:6:"active";s:1:"1";s:4:"main";s:1:"3";s:9:"protected";s:1:"0";}