a:8:{s:4:"name";s:12:"ob1_modified";s:7:"version";s:4:"0.51";s:6:"author";s:19:"Henrik J&ouml;nsson";s:10:"author_uri";s:25:"http://rise.lewander.com/";s:11:"description";s:73:"Outputs when the article was last modified or the author who modified it.";s:4:"help";s:2711:"
	<h1>Summary</h1>

	<p>Outputs when the article was last modified. The whole tag works exactly like <code>txp:posted</code><br />
except that it outputs last modified instead.</p>

	<h1>Attributes</h1>

	<h2>format</h2>

	<p>Overrides the format set in the Textpattern preferences.</p>

	<ul>
	<li><em>since</em> &#8211; outputs what time have elapsed since the last edit.</li>
		<li><em>[dateformat]</em> &#8211; outputs any format using the <a href="http://se.php.net/manual/en/function.date.php">PHP date</a> format.</li>
		<li><em>author</em> &#8211; Output the name of the author instead of the date.</li>
	</ul>

	<h2>output</h2>

	<p>When to output anything.</p>

	<ul>
	<li><em>always</em> &#8211; Always output (default).</li>
		<li><em>differs</em> &#8211; Output if modified date differs from the posted one.</li>
	</ul>

	<h2>starttext</h2>

	<p>Add text before the output.</p>

	<h2>wraptag</h2>

	<p>Standard attribute.</p>

	<h2>lang</h2>

	<p>Standard attribute.</p>

	<h1>Examples</h1>

	<p><span style="padding: 10px; border: 1px solid #999; background: #eee; display: block; margin: 10px 0 0 0; text-indent: 0; text-align: left; color: #600;width:600px;"><code>&lt;txp:ob1_modified format="Y" /&gt;</code></span><br />
This would output if the article was last modifed 6th of febuary 2003:<br />
2003</p>

	<p><span style="padding: 10px; border: 1px solid #999; background: #eee; display: block; margin: 10px 0 0 0; text-indent: 0; text-align: left; color: #600;width:600px;"><code>&lt;txp:ob1_modified format="author" /&gt;</code></span><br />
This would output if the author was me:<br />
Henrik J&ouml;nsson</p>

	<p><span style="padding: 10px; border: 1px solid #999; background: #eee; display: block; margin: 10px 0 0 0; text-indent: 0; text-align: left; color: #600;width:600px;"><code>&lt;txp:ob1_modified format="author" starttext="Last modified by " /&gt;&lt;txp:ob1_modified format="Y-m-d H:i" starttext=" at " /&gt;</code></span><br />
This would output if the author was me:<br />
Last modified by Henrik J&ouml;nsson at 2004-09-10 22:29.</p>

	<h1>Changelog</h1>

	<ul>
	<li>v.051 &#8211; I was not true to my own documentation. I&#8217;ve now fixed so the <code>format="author"</code> works properly.</li>
		<li>v0.5 &#8211; Updated to RC3 compability and added the hack <a href="http://rise.lewander.com/textpattern/116/hacking-ob1-modified">posted earlier on my website</a>.</li>
		<li>v0.31 &#8211; Fixed a bug with the <code>$differs</code> attribute.</li>
		<li>v0.3 &#8211; Added <code>starttext</code> attribute.</li>
		<li>v0.2 &#8211; Altered syntax for <code>format</code>, added <code>output</code> attribute.</li>
		<li>v0.1 &#8211; Initial release</li>
	</ul>



 ";s:4:"code";s:1432:"
function ob1_modified($atts) {
	global $dateformat,$archive_dateformat,$timeoffset,$pg,$c,$thisarticle,$id,$txpcfg;

	if (is_array($atts)) extract($atts);
	$output = (empty($output)) ? 'always' : $output;

	if($format=="author"){
		if(empty($thisarticle["author"])){
			$lastModAuthor = fetch('LastModID','textpattern','ID',$thisarticle['thisid']);
			$date_out = fetch('RealName','txp_users','name',$lastModAuthor);
		}else $date_out = $thisarticle["author"];
	}else{
		$lastMod = fetch('LastMod','textpattern','ID',$thisarticle['thisid']);
		$lastMod = strtotime($lastMod);
		$date_offset = $lastMod;

		if(!empty($format)) {
			if($format=='since'){
				$date_out = since($lastMod);
			}else{
				$date_out = date($format,$date_offset);
			}
		}else{
			if($pg or $id or $c){
				$dateformat = $archive_dateformat;
			}
			if($dateformat == "since"){
				$date_out = since($lastMod);
			}else{
				$date_out = safe_strftime($dateformat,$date_offset);
			}
		}
		if(!empty($lang)){
			if(empty($GLOBALS['date_lang'])){
				$date_lang = load_lang($lang.'_dates');
			}else global $date_lang;
			if($date_lang){
				foreach($date_lang as $k => $v){
					$date_out = str_replace($k,$v,$date_out);
				}
			}
		}
	}
	if($output=="differs"){
		if($lastMod==$thisarticle["posted"]) return "";
	}
	if(!empty($starttext)) $date_out = $starttext.$date_out;
	if(!empty($wraptag)) $date_out = tag($date_out,$wraptag);

	return $date_out;
}
";s:3:"md5";s:32:"346e7d488d1d812f27aaaaf2bf43d7c3";}