OK I think I can see where this is happening but just don't know how to track it down - it is possible that this is specific to 3.8.2 and I would be very willing to write up my method for getting it to work if I can get this time issue sorted.
The Time skew occurs if and only if there is a local mode invocation called using the <ad /> code.
I can put
<ad what="zone:1" /> in the footer or header, refer to it from an ad location or whatever but so long as there is a reference to this tag the time jumps back 10 hours.
So when I look at the plugin called
Ad tag callback
I see that its hook is at the template_compile and this tells me that it is a likely cause of elements of the time being rewritten...
Interestingly the time statement at the bottom of the board is always correctly displayed and if I switch the time mode to "detailed" I get the correct time (ie 1 minute ago) for a post just made instead of a 10 hour shift into the past... BUT in the PM inbox the time shift is still evident.
This is the plugin code:
Code:
if (!function_exists('_tag_callback'))
{
/**
* Callback-function for process_template_tag() which "parses" arguments and returns PHP code for eval
*
* @param string Options/arguments of tag
* @param string Name of function to call
* @param array Associative array of argument names and default values
*
* @return string
*/
function _tag_callback($options, $functionhandle, $arglist)
{
$options = stripslashes($options);
trim($options);
trim($functionhandle);
if (!function_exists('replace_template_variables'))
{
require_once(DIR . '/includes/functions_misc.php');
}
$param = array();
if (is_array($arglist))
{
reset($arglist);
foreach ($arglist AS $key => $val)
{
if (preg_match('#'.$key.'=([\\\]["\'])(.*?)\1#', $options, $matches))
{
$param[] = $matches[2];
}
else
{
// default argument
$param[] = $val;
}
}
}
foreach ($param AS $argument)
{
if ($return == '')
{
$return = '" . ' . $functionhandle . '(';
}
else
{
$return .= ', ';
}
// Surround variables with {} - not failsafe, but should do the job in most cases
$argument = preg_replace('#\$([a-z0-9_>-]+)((\[\'.*?\'\])+)#i', '{$\\1\\2}', $argument);
// {{$foo}} --> {$foo}
$argument = preg_replace('#(\{+)\$(.*?)(\}+)#i', '{$\\2}', $argument);
// Replace legacy variable names in templates with their modern equivalents
$argument = replace_template_variables($argument, true);
$return .= '"' . $argument . '"';
}
$return .= ') . "';
return $return;
}
}
if (!function_exists('process_template_tag'))
{
/**
* Processes user-defined tags <tagname [argument="foo" ...]/> into myfunction() PHP code for eval
*
* @param string Title of tag
* @param string Un-parsed template HTML
* @param string Name of function to call
* @param array Associative array of argument names and default values, order must be the same as for the function specified previously
*
* @return string
*/
function process_template_tag($tagname, $text, $functionhandle='', $arglist)
{
if ($functionhandle == '')
{
// No function specified - remove tag
return preg_replace("#<{$tagname}\s?/?>|<{$tagname}\s.*?/?>#si", '', $text);
}
else
{
return preg_replace("#<({$tagname})(\s+(.*?)/?)>#sie", "_tag_callback('\\3', \$functionhandle, \$arglist)", $text);
}
}
}
$template = process_template_tag('ad', $template, 'view_ad', array('what' => '', 'clientid' => 0, 'target' => '', 'source' => '', 'withtext' => 0) );
can anyone see anything that might cause the effect on time display in postbit and elsewhere in the templates?
Does anyone think I am on the right track or is it futile troubleshooting this wonderful but rather antiquated (for 3.5) implementation now?>