Example #1
0
function smarty_block_mtblogs($args, $content, &$ctx, &$repeat)
{
    $localvars = array(array('_blogs', '_blogs_counter', 'blog', 'blog_id'), common_loop_vars());
    if (!isset($content)) {
        $ctx->localize($localvars);
        if (!(isset($args['include_blogs']) || isset($args['include_websites']) || isset($args['blog_ids']) || isset($args['site_ids']) || isset($args['blog_id']))) {
            $args['include_blogs'] = 'all';
        }
        $blogs = $ctx->mt->db()->fetch_blogs($args);
        $ctx->stash('_blogs', $blogs);
        $counter = 0;
    } else {
        $blogs = $ctx->stash('_blogs');
        $counter = $ctx->stash('_blogs_counter');
    }
    if ($counter < count($blogs)) {
        $blog = $blogs[$counter];
        $ctx->stash('blog', $blog);
        $ctx->stash('blog_id', $blog->blog_id);
        $ctx->stash('_blogs_counter', $counter + 1);
        $count = $counter + 1;
        $ctx->__stash['vars']['__counter__'] = $count;
        $ctx->__stash['vars']['__odd__'] = $count % 2 == 1;
        $ctx->__stash['vars']['__even__'] = $count % 2 == 0;
        $ctx->__stash['vars']['__first__'] = $count == 1;
        $ctx->__stash['vars']['__last__'] = $count == count($blogs);
        $repeat = true;
    } else {
        $ctx->restore($localvars);
        $repeat = false;
    }
    return $content;
}
function smarty_block_mtindexlist($args, $content, &$ctx, &$repeat)
{
    $localvars = array(array('index_templates', 'index_templates_counter'), common_loop_vars());
    if (!isset($content)) {
        $ctx->localize($localvars);
        $tmpl = $ctx->mt->db()->fetch_templates(array(type => 'index', blog_id => $ctx->stash('blog_id')));
        $counter = 0;
        $ctx->stash('index_templates', $tmpl);
    } else {
        $tmpl = $ctx->stash('index_templates');
        $counter = $ctx->stash('index_templates_counter') + 1;
    }
    if ($counter < count($tmpl)) {
        $ctx->__stash['vars']['__counter__'] = $counter + 1;
        $ctx->__stash['vars']['__odd__'] = $counter % 2 == 0;
        $ctx->__stash['vars']['__even__'] = $counter % 2 == 1;
        $ctx->__stash['vars']['__first__'] = $counter == 0;
        $ctx->__stash['vars']['__last__'] = count($tmpl) == $counter + 1;
        $ctx->stash('index_templates_counter', $counter);
        $repeat = true;
    } else {
        $ctx->restore($localvars);
    }
    return $content;
}
function smarty_block_mtauthors($args, $content, &$ctx, &$repeat)
{
    $localvars = array(array('authors', 'author', 'authors_counter', 'blog_id'), common_loop_vars());
    if (!isset($content)) {
        $ctx->localize($localvars);
        $args['blog_id'] = $ctx->stash('blog_id');
        if (isset($args['id'])) {
            $args['author_id'] = $args['id'];
        } elseif (isset($args['username'])) {
            $args['author_name'] = $args['username'];
        } elseif (isset($args['display_name'])) {
            $args['author_nickname'] = $args['display_name'];
        }
        if (isset($args['sort_by'])) {
            if ($args['sort_by'] == 'display_name') {
                $args['sort_by'] = 'nickname';
            }
            if ($args['sort_by'] != 'score' && $args['sort_by'] != 'rate') {
                $args['sort_by'] = 'author_' . $args['sort_by'];
            }
        } else {
            $args['sort_by'] = 'author_created_on';
        }
        if (!isset($args['status'])) {
            $args['status'] = 'enabled';
        }
        if (isset($args['scoring_to'])) {
            $args['_scoring_to_obj'] = $ctx->stash($args['scoring_to']);
            if (is_null($args['_scoring_to_obj'])) {
                $ctx->restore($localvars);
                $repeat = false;
                return;
            }
        }
        $authors = $ctx->mt->db()->fetch_authors($args);
        $ctx->stash('authors', $authors);
        $counter = 0;
    } else {
        $authors = $ctx->stash('authors');
        $counter = $ctx->stash('authors_counter');
    }
    if ($counter < count($authors)) {
        $author = $authors[$counter];
        $ctx->stash('author', $author);
        $ctx->stash('authors_counter', $counter + 1);
        $count = $counter + 1;
        $ctx->__stash['vars']['__counter__'] = $count;
        $ctx->__stash['vars']['__odd__'] = $count % 2 == 1;
        $ctx->__stash['vars']['__even__'] = $count % 2 == 0;
        $ctx->__stash['vars']['__first__'] = $count == 1;
        $ctx->__stash['vars']['__last__'] = $count == count($authors);
        $repeat = true;
    } else {
        $ctx->restore($localvars);
        $repeat = false;
    }
    return $content;
}
function smarty_block_mtentrytags($args, $content, &$ctx, &$repeat)
{
    $localvars = array(array('_tags', 'Tag', '_tags_counter', 'tag_min_count', 'tag_max_count', 'all_tag_count', '__out', 'class_type'), common_loop_vars());
    if (!isset($content)) {
        $class = 'entry';
        if (isset($args['class'])) {
            $class = $args['class'];
        }
        $include_private = empty($args['include_private']) ? 0 : 1;
        $ctx->localize($localvars);
        require_once "MTUtil.php";
        $entry = $ctx->stash('entry');
        $blog_id = $entry->entry_blog_id;
        $entry = $ctx->stash('entry');
        $tags = $ctx->mt->db()->fetch_entry_tags(array('entry_id' => $entry->entry_id, 'blog_id' => $blog_id, 'class' => $class, 'include_private' => $include_private));
        if (!is_array($tags)) {
            $tags = array();
        }
        $ctx->stash('_tags', $tags);
        $ctx->stash('__out', false);
        $ctx->stash('class_type', $class);
        $counter = 0;
        if (!count($tags)) {
            $ctx->restore($localvars);
            $repeat = false;
            return;
        }
    } else {
        $tags = $ctx->stash('_tags');
        $counter = $ctx->stash('_tags_counter');
        $out = $ctx->stash('__out');
    }
    if ($counter < count($tags)) {
        $tag = $tags[$counter];
        $ctx->stash('Tag', $tag);
        $ctx->stash('_tags_counter', $counter + 1);
        $ctx->__stash['vars']['__counter__'] = $counter + 1;
        $ctx->__stash['vars']['__odd__'] = $counter % 2 == 0;
        $ctx->__stash['vars']['__even__'] = $counter % 2 == 1;
        $ctx->__stash['vars']['__first__'] = $counter == 0;
        $ctx->__stash['vars']['__last__'] = count($tags) == $counter + 1;
        $repeat = true;
        if (isset($args['glue']) && !empty($content)) {
            if ($out) {
                $content = $args['glue'] . $content;
            } else {
                $ctx->stash('__out', true);
            }
        }
    } else {
        if (isset($args['glue']) && $out && !empty($content)) {
            $content = $args['glue'] . $content;
        }
        $ctx->restore($localvars);
        $repeat = false;
    }
    return $content;
}
Example #5
0
function smarty_block_mtcategories($args, $content, &$ctx, &$repeat)
{
    // status: incomplete
    // parameters: show_empty
    $localvars = array(array('_categories', '_categories_counter', 'category', 'inside_mt_categories', 'entries', '_categories_glue', 'blog_id', 'blog', '__out'), common_loop_vars());
    if (!isset($content)) {
        $ctx->localize($localvars);
        $args['sort_by'] = 'label';
        $args['sort_order'] = 'ascend';
        $categories = $ctx->mt->db()->fetch_categories($args);
        $glue = $args['glue'];
        $ctx->stash('_categories_glue', $glue);
        $ctx->stash('_categories', $categories);
        $ctx->stash('inside_mt_categories', 1);
        $ctx->stash('show_empty', isset($args['show_empty']) ? $args['show_empty'] : '0');
        $ctx->stash('__out', false);
        $counter = 0;
    } else {
        $categories = $ctx->stash('_categories');
        $counter = $ctx->stash('_categories_counter');
        $glue = $ctx->stash('_categories_glue');
        $out = $ctx->stash('__out');
    }
    if ($counter < count($categories)) {
        $category = $categories[$counter];
        $ctx->stash('category', $category);
        $ctx->stash('entries', null);
        $ctx->stash('_categories_counter', $counter + 1);
        $ctx->stash('blog_id', $category->category_blog_id);
        $ctx->stash('ArchiveListHeader', $counter == 0);
        $ctx->stash('ArchiveListFooter', $counter + 1 == count($categories));
        $ctx->stash('blog', $category->blog());
        if (!empty($glue) && !empty($content)) {
            if ($out) {
                $content = $glue . $content;
            } else {
                $ctx->stash('__out', true);
            }
        }
        $count = $counter + 1;
        $ctx->__stash['vars']['__counter__'] = $count;
        $ctx->__stash['vars']['__odd__'] = $count % 2 == 1;
        $ctx->__stash['vars']['__even__'] = $count % 2 == 0;
        $ctx->__stash['vars']['__first__'] = $count == 1;
        $ctx->__stash['vars']['__last__'] = $count == count($categories);
        $repeat = true;
    } else {
        if (!empty($glue) && $out && !empty($content)) {
            $content = $glue . $content;
        }
        $ctx->restore($localvars);
        $repeat = false;
    }
    return $content;
}
function smarty_function_mtcommentrepliesrecurse($args, &$ctx)
{
    $localvars = array(array('comments', 'comment_order_num', 'comment', 'current_timestamp', 'commenter', 'blog', 'blog_id'), common_loop_vars());
    $token_fn = $ctx->stash('_comment_replies_tokens');
    $comment = $ctx->stash('comment');
    if (!$comment) {
        $repeat = false;
        return '';
    }
    $args['comment_id'] = $comment->comment_id;
    $comments = $ctx->mt->db()->fetch_comment_replies($args);
    if (!$comments) {
        $repeat = false;
        return '';
    }
    $ctx->stash('comments', $comments);
    $counter = 0;
    $content = '';
    $ctx->localize($localvars);
    while ($comment = array_shift($comments)) {
        $blog_id = $ctx->stash('blog_id');
        if ($comment->comment_commenter_id) {
            $commenter = $comment->commenter();
            if (empty($commenter)) {
                $ctx->__stash['commenter'] = null;
            } else {
                $ctx->stash('commenter', $commenter);
            }
        } else {
            $ctx->__stash['commenter'] = null;
        }
        if ($blog_id != $comment->comment_blog_id) {
            $blog_id = $comment->comment_blog_id;
            $ctx->stash('blog_id', $blog_id);
            $ctx->stash('blog', $ctx->mt->db()->fetch_blog($blog_id));
        }
        $ctx->stash('comment', $comment);
        $ctx->stash('current_timestamp', $comment->comment_created_on);
        $ctx->stash('comment_order_num', $counter + 1);
        $count = $counter + 1;
        $ctx->__stash['vars']['__counter__'] = $count;
        $ctx->__stash['vars']['__odd__'] = $count % 2 == 1;
        $ctx->__stash['vars']['__even__'] = $count % 2 == 0;
        $ctx->__stash['vars']['__first__'] = $count == 1;
        $ctx->__stash['vars']['__last__'] = $count == count($comments);
        ob_start();
        $token_fn($ctx, array());
        $content .= ob_get_contents();
        ob_end_clean();
        $counter++;
    }
    $ctx->restore($localvars);
    return $content;
}
Example #7
0
function smarty_block_mtfor($args, $content, &$ctx, &$repeat)
{
    $localvars = array(array('__for_end', '__for_var', '__out', '__for_increment'), common_loop_vars());
    if (!isset($content)) {
        $ctx->localize($localvars);
        // first invocation; setup loop
        $start = array_key_exists('start', $args) ? $args['start'] : (array_key_exists('from', $args) ? $args['from'] : 0);
        $end = array_key_exists('end', $args) ? $args['end'] : (array_key_exists('to', $args) ? $args['to'] : null);
        $var = $args['var'];
        if ($end === null) {
            $content = '';
            $repeat = false;
        }
        $index = $start;
        $counter = 1;
        $ctx->stash('__for_end', $end);
        $ctx->stash('__for_var', $var);
        $ctx->stash('__out', false);
        $ctx->stash('__for_increment', isset($args['increment']) ? $args['increment'] : 1);
    } else {
        $inc = $ctx->stash('__for_increment');
        $index = $ctx->__stash['vars']['__index__'] + $inc;
        $counter = $ctx->__stash['vars']['__counter__'] + 1;
        $end = $ctx->stash('__for_end');
        $var = $ctx->stash('__for_var');
        $out = $ctx->stash('__out');
    }
    if ($index <= $end) {
        $ctx->__stash['vars']['__index__'] = $index;
        $ctx->__stash['vars']['__counter__'] = $counter;
        $ctx->__stash['vars']['__odd__'] = $counter % 2 == 1;
        $ctx->__stash['vars']['__even__'] = $counter % 2 == 0;
        $ctx->__stash['vars']['__first__'] = $counter == 1;
        $ctx->__stash['vars']['__last__'] = $index == $end;
        if ($var) {
            $ctx->__stash['vars'][$var] = $index;
        }
        if (isset($args['glue']) && !empty($content)) {
            if ($out) {
                $content = $args['glue'] . $content;
            } else {
                $ctx->stash('__out', true);
            }
        }
        $repeat = true;
    } else {
        if (isset($args['glue']) && $out && !empty($content)) {
            $content = $args['glue'] . $content;
        }
        $ctx->restore($localvars);
        $repeat = false;
    }
    return $content;
}
Example #8
0
function smarty_block_mtpings($args, $content, &$ctx, &$repeat)
{
    $localvars = array(array('ping', '_pings', '_pings_counter', 'current_timestamp', 'blog_id', 'blog'), common_loop_vars());
    if (!isset($content)) {
        $ctx->localize($localvars);
        $entry = $ctx->stash('entry');
        if (isset($entry)) {
            $args['entry_id'] = $entry->entry_id;
        }
        $blog = $ctx->stash('blog');
        if ($blog) {
            $args['blog_id'] = $blog->blog_id;
        }
        $pings = $ctx->mt->db()->fetch_pings($args);
        $ctx->stash('_pings', $pings);
        $counter = 0;
    } else {
        $pings = $ctx->stash('_pings');
        $counter = $ctx->stash('_pings_counter');
    }
    if ($counter < count($pings)) {
        $blog_id = $ctx->stash('blog_id');
        $ping = $pings[$counter];
        if (!empty($ping)) {
            if ($blog_id != $ping->tbping_blog_id) {
                $blog_id = $ping->tbping_blog_id;
                $ctx->stash('blog_id', $blog_id);
                $ctx->stash('blog', $ping->blog());
            }
            $ctx->stash('ping', $ping);
            $ctx->stash('current_timestamp', $ping->tbping_created_on);
            $ctx->stash('_pings_counter', $counter + 1);
            $repeat = true;
            $count = $counter + 1;
            $ctx->__stash['vars']['__counter__'] = $count;
            $ctx->__stash['vars']['__odd__'] = $count % 2 == 1;
            $ctx->__stash['vars']['__even__'] = $count % 2 == 0;
            $ctx->__stash['vars']['__first__'] = $count == 1;
            $ctx->__stash['vars']['__last__'] = $count == count($pings);
        }
    } else {
        $ctx->restore($localvars);
        $repeat = false;
    }
    return $content;
}
Example #9
0
function smarty_block_mtpagerblock($args, $content, &$ctx, &$repeat)
{
    $localvars = array(array('__out', '__pager_limit', '__pager_count', '__pager_pages'), common_loop_vars());
    if (!isset($content)) {
        $ctx->localize($localvars);
        // first invocation; setup loop
        $limit = $ctx->stash('__pager_limit');
        $offset = $ctx->stash('__pager_offset');
        $count = $ctx->stash('__pager_total_count');
        $pages = $limit ? ceil($count / $limit) : 1;
        $counter = 1;
        $ctx->stash('__pager_pages', $pages);
        $ctx->stash('__out', false);
    } else {
        $counter = $ctx->__stash['vars']['__counter__'] + 1;
        $limit = $ctx->stash('__pager_limit');
        $offset = $ctx->stash('__pager_offset');
        $count = $ctx->stash('__pager_total_count');
        $pages = $ctx->stash('__pager_pages');
        $out = $ctx->stash('__out');
    }
    if ($counter <= $pages) {
        $ctx->__stash['vars']['__value__'] = $counter;
        $ctx->__stash['vars']['__counter__'] = $counter;
        $ctx->__stash['vars']['__odd__'] = $counter % 2 == 1;
        $ctx->__stash['vars']['__even__'] = $counter % 2 == 0;
        $ctx->__stash['vars']['__first__'] = $counter == 1;
        $ctx->__stash['vars']['__last__'] = $counter == $pages;
        if (isset($args['glue']) && !empty($content)) {
            if ($out) {
                $content = $args['glue'] . $content;
            } else {
                $ctx->stash('__out', true);
            }
        }
        $repeat = true;
    } else {
        if (isset($args['glue']) && $out && !empty($content)) {
            $content = $args['glue'] . $content;
        }
        $ctx->restore($localvars);
        $repeat = false;
    }
    return $content;
}
function smarty_block_mtarchives($args, $content, &$ctx, &$repeat)
{
    $localvars = array(array('current_archive_type', 'archive_types', 'archive_type_index', 'old_preferred_archive_type'), common_loop_vars());
    if (!isset($content)) {
        $blog = $ctx->stash('blog');
        $at = $args['type'];
        $at or $at = $args['archive_type'];
        $at or $at = $blog->blog_archive_type;
        if (empty($at) || $at == 'None') {
            $repeat = false;
            return '';
        }
        $at = preg_split("/\\s*,\\s*/", $at);
        $ctx->localize($localvars);
        $ctx->stash('archive_types', $at);
        $ctx->stash('old_preferred_archive_type', $blog->blog_archive_type_preferred);
        $i = 0;
    } else {
        $at = $ctx->stash('archive_types');
        $i = $ctx->stash('archive_type_index') + 1;
        $blog = $ctx->stash('blog');
    }
    if ($i < count($at)) {
        $curr_at = $at[$i];
        $ctx->stash('current_archive_type', $curr_at);
        $ctx->stash('archive_type_index', $i);
        $counter = $i + 1;
        $ctx->__stash['vars']['__counter__'] = $counter;
        $ctx->__stash['vars']['__odd__'] = $counter % 2 == 1;
        $ctx->__stash['vars']['__even__'] = $counter % 2 == 0;
        $ctx->__stash['vars']['__first__'] = $counter == 1;
        $ctx->__stash['vars']['__last__'] = count($at) == $counter;
        $blog->blog_archive_type_preferred = $curr_at;
        $ctx->stash('blog', $blog);
        $repeat = true;
    } else {
        $blog->blog_archive_type_preferred = $ctx->stash('old_preferred_archive_type');
        $ctx->stash('blog', $blog);
        $ctx->restore($localvars);
        $repeat = false;
    }
    return $content;
}
function smarty_block_mtloop($args, $content, &$ctx, &$repeat)
{
    $localvars = array(array('__loop_keys', '__loop_values', '__out'), common_loop_vars());
    if (!isset($content)) {
        $ctx->localize($localvars);
        $vars =& $ctx->__stash['vars'];
        $value = '';
        $name = $args['name'];
        $name or $name = $args['var'];
        if (!$name) {
            return '';
        }
        if (isset($vars[$name])) {
            $value = $vars[$name];
        }
        if (!is_array($value) && preg_match('/^smarty_fun_[a-f0-9]+$/', $value)) {
            if (function_exists($value)) {
                ob_start();
                $value($ctx, array());
                $value = ob_get_contents();
                ob_end_clean();
            } else {
                $value = '';
            }
        }
        if (!is_array($value) || 0 == count($value)) {
            $repeat = false;
            return '';
        }
        $sort = $args['sort_by'];
        $keys = array_keys($value);
        if ($sort) {
            $sort = strtolower($sort);
            if (preg_match('/\\bkey\\b/', $sort)) {
                usort($keys, create_function('$a,$b', 'return strcmp($a, $b);'));
            } elseif (preg_match('/\\bvalue\\b/', $sort)) {
                $sort_fn = '';
                foreach (array_keys($value) as $key) {
                    $v = $value[$key];
                    $sort_fn .= "\$value['{$key}']='{$v}';";
                }
                if (preg_match('/\\bnumeric\\b/', $sort)) {
                    $sort_fn .= 'return $value[$a] === $value[$b] ? 0 : ($value[$a] > $value[$b] ? 1 : -1);';
                    $sorter = create_function('$a,$b', $sort_fn);
                } else {
                    $sort_fn .= 'return strcmp($value[$a], $value[$b]);';
                    $sorter = create_function('$a,$b', $sort_fn);
                }
                usort($keys, $sorter);
            }
            if (preg_match('/\\breverse\\b/', $sort)) {
                $keys = array_reverse($keys);
            }
        }
        $counter = 1;
        $ctx->stash('__loop_values', $value);
        $ctx->stash('__out', false);
    } else {
        $counter = $ctx->__stash['vars']['__counter__'] + 1;
        $keys = $ctx->stash('__loop_keys');
        $value = $ctx->stash('__loop_values');
        $out = $ctx->stash('__out');
        if (!isset($keys) || $keys == 0) {
            $ctx->restore($localvars);
            $repeat = false;
            if (isset($args['glue']) && $out && !empty($content)) {
                $content = $args['glue'] . $content;
            }
            return $content;
        }
    }
    $key = array_shift($keys);
    $this_value = $value[$key];
    $ctx->stash('__loop_keys', $keys);
    $ctx->__stash['vars']['__counter__'] = $counter;
    $ctx->__stash['vars']['__odd__'] = $counter % 2 == 1;
    $ctx->__stash['vars']['__even__'] = $counter % 2 == 0;
    $ctx->__stash['vars']['__first__'] = $counter == 1;
    $ctx->__stash['vars']['__last__'] = count($keys) == 0;
    $ctx->__stash['vars']['__key__'] = $key;
    $ctx->__stash['vars']['__value__'] = $this_value;
    if (is_array($this_value) && 0 < count($this_value)) {
        require_once "MTUtil.php";
        if (is_hash($this_value)) {
            foreach (array_keys($this_value) as $inner_key) {
                $ctx->__stash['vars'][strtolower($inner_key)] = $this_value[$inner_key];
            }
        }
    }
    if (isset($args['glue']) && !empty($content)) {
        if ($out) {
            $content = $args['glue'] . $content;
        } else {
            $ctx->stash('__out', true);
        }
    }
    if (0 === count($keys)) {
        $ctx->stash('__loop_keys', 0);
    }
    $repeat = true;
    return $content;
}
Example #12
0
function smarty_block_mtentries($args, $content, &$ctx, &$repeat)
{
    $localvars = array(array('entry', '_entries_counter', 'entries', 'current_timestamp', 'modification_timestamp', '_entries_lastn', 'current_timestamp_end', 'DateHeader', 'DateFooter', '_entries_glue', 'blog', 'blog_id', 'conditional', 'else_content', '__out'), common_loop_vars());
    if (isset($args['sort_by']) && $args['sort_by'] == 'score' && !isset($args['namespace'])) {
        return $ctx->error($ctx->mt->translate('sort_by="score" must be used together with a namespace.'));
    }
    if (!isset($content)) {
        $ctx->localize($localvars);
        // If we have a set of entries that were set based on context,
        // but the user has specified attributes that effectively
        // break that context, clear the stashed entries so fetch_entries
        // can reselect.
        $this_tag = strtolower($ctx->this_tag());
        if ($this_tag == 'mtentries' || $this_tag == 'mtpages') {
            if ($ctx->stash('entries') && (isset($args['category']) || isset($args['categories']) || isset($args['tag']) || isset($args['tags']) || isset($args['author']))) {
                $ctx->__stash['entries'] = null;
            }
        }
        if ($ctx->__stash['entries']) {
            if (isset($args['id']) || isset($args['recently_commented_on']) || isset($args['include_subcategories']) || isset($args['days'])) {
                $ctx->__stash['entries'] = null;
            } else {
                if (isset($args['sort_by'])) {
                    $ids = array();
                    foreach ($ctx->__stash['entries'] as $e) {
                        $ids[] = $e->entry_id;
                    }
                    $ctx->__stash['entries'] = null;
                    $args['entry_ids'] = $ids;
                }
            }
        }
        $counter = 0;
        $lastn = $args['lastn'];
        $ctx->stash('_entries_lastn', $lastn);
        $ctx->stash('__out', false);
    } else {
        $lastn = $ctx->stash('_entries_lastn');
        $counter = $ctx->stash('_entries_counter');
        $out = $ctx->stash('__out');
    }
    if (!isset($args['class'])) {
        $args['class'] = 'entry';
    }
    if (isset($args['offset']) && $args['offset'] == 'auto') {
        $l = 0;
        if ($args['limit']) {
            if ($args['limit'] == 'auto') {
                if ($_REQUEST['limit']) {
                    $l = $_REQUEST['limit'];
                } else {
                    $blog_id = intval($ctx->stash('blog_id'));
                    $blog = $ctx->mt->db()->fetch_blog($blog_id);
                    $l = $blog->blog_entries_on_index;
                }
            } else {
                $l = $args['limit'];
            }
        }
        if (!$l) {
            $l = 20;
        }
        $ctx->stash('__pager_limit', $l);
        if ($_REQUEST['offset']) {
            $ctx->stash('__pager_offset', $_REQUEST['offset']);
        }
    }
    $entries = $ctx->stash('entries');
    if (!isset($entries)) {
        require_once 'archive_lib.php';
        $at = $ctx->stash('current_archive_type');
        try {
            $archiver = ArchiverFactory::get_archiver($at);
        } catch (Exception $e) {
        }
        if (isset($args['id'])) {
            $args['entry_id'] = $args['id'];
        }
        $ts = $ctx->stash('current_timestamp');
        $tse = $ctx->stash('current_timestamp_end');
        if ($ts && $tse) {
            # assign date range if we have both
            # start and end date
            $args['current_timestamp'] = $ts;
            $args['current_timestamp_end'] = $tse;
        }
        if (isset($archiver)) {
            $args['limit'] || $args['lastn'] or $args['lastn'] = -1;
            $archiver->setup_args($args);
        }
        $cat = $ctx->stash('category');
        if (isset($cat) && ($args['class'] == 'entry' && $cat->category_class == 'category' || $args['class'] == 'page' && $cat->category_class == 'folder')) {
            $args['category'] or $args['categories'] or $args['category_id'] = $cat->category_id;
            if ($ctx->stash('inside_mt_categories')) {
                $args['category_id'] = $cat->category_id;
                $args['show_empty'] = $ctx->stash('show_empty');
            } else {
                $args['category'] or $args['categories'] or $args['category_id'] = $cat->category_id;
            }
        }
        if ($tag = $ctx->stash('Tag')) {
            $args['tag'] or $args['tags'] or $args['tags'] = is_object($tag) ? $tag->tag_name : $tag;
        }
        if (isset($args['offset']) && $args['offset'] == 'auto') {
            $total_count = 0;
        }
        $entries = $ctx->mt->db()->fetch_entries($args, $total_count);
        if (isset($args['offset']) && $args['offset'] == 'auto') {
            $ctx->stash('__pager_total_count', $total_count);
        }
        $ctx->stash('entries', $entries);
    }
    $ctx->stash('conditional', empty($entries) ? 0 : 1);
    if (empty($entries)) {
        $ret = $ctx->_hdlr_if($args, $content, $ctx, $repeat, 0);
        if (!$repeat) {
            $ctx->restore($localvars);
        }
        return $ret;
    }
    $ctx->stash('_entries_glue', $args['glue']);
    if ($lastn > count($entries) || $lastn == -1) {
        $lastn = count($entries);
        $ctx->stash('_entries_lastn', $lastn);
    }
    if ($lastn ? $counter < $lastn : $counter < count($entries)) {
        $blog_id = $ctx->stash('blog_id');
        $entry = $entries[$counter];
        if (!empty($entry)) {
            if ($blog_id != $entry->entry_blog_id) {
                $blog_id = $entry->entry_blog_id;
                $ctx->stash('blog_id', $blog_id);
                $ctx->stash('blog', $entry->blog());
            }
            if ($counter > 0) {
                $last_entry_created_on = $entries[$counter - 1]->entry_authored_on;
            } else {
                $last_entry_created_on = '';
            }
            if ($counter < count($entries) - 1) {
                $next_entry_created_on = $entries[$counter + 1]->entry_authored_on;
            } else {
                $next_entry_created_on = '';
            }
            $ctx->stash('DateHeader', !(substr($entry->entry_authored_on, 0, 8) == substr($last_entry_created_on, 0, 8)));
            $ctx->stash('DateFooter', substr($entry->entry_authored_on, 0, 8) != substr($next_entry_created_on, 0, 8));
            $ctx->stash('entry', $entry);
            $ctx->stash('current_timestamp', $entry->entry_authored_on);
            $ctx->stash('current_timestamp_end', null);
            $ctx->stash('modification_timestamp', $entry->entry_modified_on);
            $ctx->stash('_entries_counter', $counter + 1);
            $_REQUEST['entry_ids_published'][$entry->entry_id] = 1;
            $glue = $ctx->stash('_entries_glue');
            if (isset($glue) && !empty($content)) {
                if ($out) {
                    $content = $glue . $content;
                } else {
                    $ctx->stash('__out', true);
                }
            }
            $count = $counter + 1;
            $ctx->__stash['vars']['__counter__'] = $count;
            $ctx->__stash['vars']['__odd__'] = $count % 2 == 1;
            $ctx->__stash['vars']['__even__'] = $count % 2 == 0;
            $ctx->__stash['vars']['__first__'] = $count == 1;
            $ctx->__stash['vars']['__last__'] = $count == count($entries);
            $repeat = true;
        }
    } else {
        $glue = $ctx->stash('_entries_glue');
        if (isset($glue) && $out && !empty($content)) {
            $content = $glue . $content;
        }
        $ctx->restore($localvars);
        $repeat = false;
    }
    return $content;
}
function smarty_block_mttags($args, $content, &$ctx, &$repeat)
{
    $localvars = array(array('_tags', 'Tag', '_tags_counter', 'tag_min_count', 'tag_max_count', 'all_tag_count', 'include_blogs', 'exclude_blogs', 'blog_ids', '__out'), common_loop_vars());
    if (!isset($content)) {
        $ctx->localize($localvars);
        $ctx->stash('include_blogs', $args['include_blogs']);
        $ctx->stash('exclude_blogs', $args['exclude_blogs']);
        $ctx->stash('blog_ids', $args['blog_ids']);
        if (!isset($args['include_blogs']) && !isset($args['exclude_blogs']) && !isset($args['blog_ids']) && !isset($args['blog_id'])) {
            $blog_id = $ctx->stash('blog_id');
            $args['blog_id'] = $ctx->stash('blog_id');
        }
        if (isset($args['top'])) {
            $post_sort_by = $args['sort_by'];
            $post_sort_order = $args['sort_order'];
            $args['sort_by'] = 'rank';
            $args['sort_order'] = 'descend';
        }
        if (isset($args['sort_by'])) {
            $s = $args['sort_by'];
            if ($s == 'rank' || $s == 'count') {
                // Aliased
                $args['sort_by'] = 'count';
                $args['sort_order'] or $args['sort_order'] = 'descend';
                // Inverted default
            } elseif ($s != 'name' && $s != 'id') {
                $args['sort_by'] = NULL;
            }
        }
        $type = 'entry';
        if (isset($args['type'])) {
            $type = strtolower($args['type']);
        }
        if ('page' == $type) {
            $args['class'] = 'page';
            $tags = $ctx->mt->db()->fetch_entry_tags($args);
        } elseif ('asset' == $type) {
            $tags = $ctx->mt->db()->fetch_asset_tags($args);
        } else {
            $args['class'] = 'entry';
            $tags = $ctx->mt->db()->fetch_entry_tags($args);
        }
        $min = 0;
        $max = 0;
        $all_count = 0;
        if ($tags) {
            foreach ($tags as $tag) {
                $count = $tag->tag_count;
                if ($count > $max) {
                    $max = $count;
                }
                if ($count < $min or $min == 0) {
                    $min = $count;
                }
                $all_count += $count;
            }
            if (isset($args['limit'])) {
                $tags = array_slice($tags, 0, $args['limit']);
            }
            // Handle ordering based on 'top' attribute
            // implies sorting by rank/descend and limit by # requested
            // then, resort based on attributes or sane defaults
            if (isset($args['top'])) {
                $tags = array_slice($tags, 0, $args['top']);
                // now, resort by original sort order
                $post_sort_by or $post_sort_by = 'name';
                if ($post_sort_by == 'name') {
                    $post_sort_order or $post_sort_order = 'ascend';
                    require_once "MTUtil.php";
                    uasort($tags, 'tagarray_name_sort');
                    if ($post_sort_order && $post_sort_order == 'descend') {
                        $tags = array_reverse($tags);
                    }
                } elseif ($post_sort_by == 'rank' || $post_sort_by == 'count') {
                    $post_sort_order or $post_sort_order = 'descend';
                    // we're already sorted by rank; just check if
                    // order is not descending
                    if ($post_sort_order != 'descend') {
                        $tags = array_reverse($tags);
                    }
                }
            } elseif (isset($args['sort_by']) && $args['sort_by'] == 'id') {
                $fn = create_function('$a,$b', 'return intval($a->id) == intval($b->id) ? 0 : intval($a->id) > intval($b->id) ? 1 : -1;');
                usort($tags, $fn);
                if (!isset($args['sort_order'])) {
                    $sort_order = 'descend';
                }
                if ($sort_order && $sort_order == 'descend') {
                    $tags = array_reverse($tags);
                }
            }
        }
        $ctx->stash('tag_min_count', $min);
        $ctx->stash('tag_max_count', $max);
        $ctx->stash('all_tag_count', $all_count);
        $ctx->stash('_tags', $tags);
        $ctx->stash('__out', false);
        $counter = 0;
    } else {
        $tags = $ctx->stash('_tags');
        $counter = $ctx->stash('_tags_counter');
        $out = $ctx->stash('__out');
    }
    if ($counter < count($tags)) {
        $tag = $tags[$counter];
        $ctx->stash('Tag', $tag);
        $ctx->stash('_tags_counter', $counter + 1);
        $repeat = true;
        if (isset($args['glue'])) {
            if ($out && !empty($content)) {
                $content = $args['glue'] . $content;
            }
            if (!$out && !empty($content)) {
                $ctx->stash('__out', true);
            }
        }
        $count = $counter + 1;
        $ctx->__stash['vars']['__counter__'] = $count;
        $ctx->__stash['vars']['__odd__'] = $count % 2 == 1;
        $ctx->__stash['vars']['__even__'] = $count % 2 == 0;
        $ctx->__stash['vars']['__first__'] = $count == 1;
        $ctx->__stash['vars']['__last__'] = $count == count($tags);
    } else {
        if (isset($args['glue'])) {
            if ($out && !empty($content)) {
                $content = $args['glue'] . $content;
            }
        }
        $ctx->restore($localvars);
        $repeat = false;
    }
    return $content;
}
function smarty_block_mtcomments($args, $content, &$ctx, &$repeat)
{
    $localvars = array(array('comments', 'comment_order_num', 'comment', 'current_timestamp', 'commenter', 'blog', 'blog_id', 'conditional', 'else_content', '_comments_glue', '_comments_out'), common_loop_vars());
    if (!isset($content)) {
        $ctx->localize($localvars);
        $entry = $ctx->stash('entry');
        if ($entry) {
            $args['entry_id'] = $entry->entry_id;
        }
        $blog = $ctx->stash('blog');
        if ($blog) {
            $args['blog_id'] = $blog->blog_id;
        }
        $comments = $ctx->mt->db()->fetch_comments($args);
        $ctx->stash('comments', $comments);
        $counter = 0;
        $out = false;
        $ctx->stash('_comments_glue', $args['glue']);
        $ctx->stash('_comments_out', false);
    } else {
        $comments = $ctx->stash('comments');
        $counter = $ctx->stash('comment_order_num');
        $out = $ctx->stash('_comments_out');
    }
    if (empty($comments)) {
        $ret = $ctx->_hdlr_if($args, $content, $ctx, $repeat, 0);
        if (!$repeat) {
            $ctx->restore($localvars);
        }
        return $ret;
    }
    $ctx->stash('conditional', empty($comments) ? 0 : 1);
    if ($counter < count($comments)) {
        $blog_id = $ctx->stash('blog_id');
        $comment = $comments[$counter];
        if ($comment->comment_commenter_id) {
            $commenter = $comment->commenter();
            if (empty($commenter)) {
                $ctx->__stash['commenter'] = null;
            } else {
                $ctx->stash('commenter', $commenter);
            }
        } else {
            $ctx->__stash['commenter'] = null;
        }
        if ($blog_id != $comment->comment_blog_id) {
            $blog_id = $comment->comment_blog_id;
            $ctx->stash('blog_id', $blog_id);
            $ctx->stash('blog', $comment->blog());
        }
        $ctx->stash('comment', $comment);
        $ctx->stash('current_timestamp', $comment->comment_created_on);
        $ctx->stash('comment_order_num', $counter + 1);
        $repeat = true;
        $count = $counter + 1;
        $ctx->__stash['vars']['__counter__'] = $count;
        $ctx->__stash['vars']['__odd__'] = $count % 2 == 1;
        $ctx->__stash['vars']['__even__'] = $count % 2 == 0;
        $ctx->__stash['vars']['__first__'] = $count == 1;
        $ctx->__stash['vars']['__last__'] = $count == count($comments);
        $glue = $ctx->stash('_comments_glue');
        if (isset($glue) && !empty($content)) {
            if ($out) {
                $content = $glue . $content;
            } else {
                $ctx->stash('_comments_out', true);
            }
        }
    } else {
        $glue = $ctx->stash('_comments_glue');
        if (isset($glue) && $out && !empty($content)) {
            $content = $glue . $content;
        }
        $ctx->restore($localvars);
        $repeat = false;
    }
    return $content;
}
function smarty_block_mtestraiersearch($args, $content, $ctx, &$repeat)
{
    $localvars = array(array('_estraier_search_time', '_estraier_count', '_estraier_counter', '_estraier_search_hit', '_estraier_search_meta', '_estraier_search_results'), common_loop_vars());
    $prefix = '';
    if (isset($args['prefix'])) {
        $prefix = $args['prefix'];
    }
    if (!isset($content)) {
        $ctx->localize($localvars);
        if (isset($args['cache_ttl'])) {
            $cache_ttl = $args['cache_ttl'];
        }
        if (isset($args['limit'])) {
            $limit = $args['limit'];
            if (!ctype_digit((string) $limit)) {
                $limit = '-1';
            }
        } else {
            $limit = '-1';
        }
        if (isset($args['offset'])) {
            $offset = $args['offset'];
            if (!ctype_digit((string) $offset)) {
                $offset = NULL;
            }
        }
        if ($offset) {
            if (isset($args['decrementoffset'])) {
                if ($args['decrementoffset']) {
                    $offset--;
                }
            }
        }
        if (isset($args['count'])) {
            if ($args['count']) {
                $need_count = 1;
                $limit = 0;
            }
        }
        if (isset($args['ad_attr'])) {
            $ad_attr = $args['ad_attr'];
        } else {
            if (isset($args['ad_attrs'])) {
                $ad_attr = $args['ad_attrs'];
            }
        }
        if (isset($args['add_condition'])) {
            $add_condition = $args['add_condition'];
        } else {
            if (isset($args['add_conditions'])) {
                $ad_attr = $args['add_conditions'];
            }
        }
        if (isset($args['values'])) {
            $values = $args['values'];
        } else {
            if (isset($args['value'])) {
                $ad_attr = $args['value'];
            }
        }
        if (isset($args['phrase'])) {
            $phrase = $args['phrase'];
        } else {
            if (isset($args['query'])) {
                $phrase = $args['query'];
            }
        }
        if ($phrase) {
            if (!is_array($phrase)) {
                if (strpos($phrase, ':') !== FALSE) {
                    $phrase = str_getcsv($phrase, ':');
                    $_phrase = array();
                    foreach ($phrase as $q) {
                        if (strpos($q, 'Array.') === 0) {
                            $q = str_replace('Array.', '', $q);
                            $q = $ctx->__stash['vars'][$q];
                        }
                        array_push($_phrase, $q);
                    }
                    $phrase = $_phrase;
                }
            }
        }
        if ($ad_attr) {
            if (!is_array($ad_attr)) {
                if (strpos($ad_attr, ':') !== FALSE) {
                    $ad_attr = str_getcsv($ad_attr, ':');
                } else {
                    $ad_attr = array($ad_attr);
                }
            }
        }
        if ($add_condition) {
            if (!is_array($add_condition)) {
                if (strpos($add_condition, ':') !== FALSE) {
                    $add_condition = str_getcsv($add_condition, ':');
                } else {
                    $add_condition = array($add_condition);
                }
            }
        }
        if ($values) {
            if (!is_array($values)) {
                if (strpos($values, ':') !== FALSE) {
                    $values = str_getcsv($values, ':');
                } else {
                    $values = array($values);
                }
            }
        }
        $i = 0;
        $condition = '';
        if ($ad_attr) {
            foreach ($ad_attr as $attr) {
                $cond = $add_condition[$i];
                $value = $values[$i];
                if (strpos($attr, 'Array.') === 0) {
                    $attr = str_replace('Array.', '', $attr);
                    $attr = $ctx->__stash['vars'][$attr];
                }
                if (strpos($cond, 'Array.') === 0) {
                    $cond = str_replace('Array.', '', $cond);
                    $cond = $ctx->__stash['vars'][$cond];
                }
                if (strpos($value, 'Array.') === 0) {
                    $value = str_replace('Array.', '', $value);
                    $value = $ctx->__stash['vars'][$value];
                }
                $add_cond = " -attr " . escapeshellarg("{$attr} {$cond} {$value}");
                $condition .= $add_cond;
                $i++;
            }
        }
        $cmd = $ctx->mt->config('EstcmdPath');
        $cmd .= " search -vx";
        if ($offset) {
            $cmd .= " -sk {$offset}";
        }
        $cmd .= " -max {$limit}";
        $cmd .= $condition;
        if (!$need_count) {
            if (isset($args['sort_by'])) {
                $sort_by = $args['sort_by'];
            }
            if (isset($args['sort_order'])) {
                $sort_order = $args['sort_order'];
            }
            if ($sort_by && $sort_order) {
                if ($sort_order == 'ascend') {
                    $sort_order = 'NUMA';
                } else {
                    if ($sort_order == 'decend') {
                        $sort_order = 'NUMD';
                    }
                }
                $cmd .= " -ord " . escapeshellarg("{$sort_by} {$sort_order}");
            }
        }
        $cmd .= ' ' . $ctx->mt->config('EstcmdIndex');
        if ($phrase) {
            if (isset($args['and_or'])) {
                $and_or = $args['and_or'];
            }
            if (!$and_or) {
                $and_or = 'OR';
            }
            $and_or = strtoupper($and_or);
            $and_or = " {$and_or} ";
            if (is_array($phrase)) {
                $phrase = escapeshellarg(implode($and_or, $phrase));
            } else {
                $phrase = escapeshellarg($phrase);
                if (isset($args['raw_query'])) {
                    $raw_query = $args['raw_query'];
                }
                if (!$raw_query) {
                    if (isset($args['separator'])) {
                        $separator = $args['separator'];
                    }
                    if (!$separator) {
                        $separator = ' ';
                    }
                    if (strpos($phrase, $separator) !== FALSE) {
                        $phrase = explode($separator, $phrase);
                        $phrase = join($and_or, $phrase);
                    }
                }
            }
            $cmd .= " {$phrase}";
        }
        $ctx->__stash['vars']['estcmd_cmd'] = $cmd;
        $hash = md5($cmd);
        if ($cache_ttl) {
            $delimiter = DIRECTORY_SEPARATOR;
            $cache_dir = $ctx->mt->config('PowerCMSFilesDir') . "{$delimiter}cache{$delimiter}Estraier{$delimiter}";
            $cache = $cache_dir . $hash;
            if (file_exists($cache)) {
                $mtime = filemtime($cache);
                $time = time();
                if ($time - $cache_ttl < $mtime) {
                    $xml = file_get_contents($cache);
                }
            }
        }
        if (!$xml) {
            $xml = shell_exec($cmd);
            if ($cache_ttl) {
                file_put_contents($cache, $xml);
            }
        }
        $result = new SimpleXMLElement($xml);
        $records = $result->document;
        $meta = $result->meta;
        $ctx->stash('_estraier_search_meta', $meta);
        $hit = $meta->hit;
        $hit = $hit->attributes()->number;
        $hit = (string) $hit;
        if ($need_count) {
            $repeat = FALSE;
            $ctx->restore($localvars);
            return $hit;
        }
        $time = $meta->time;
        $time = $time->attributes()->time;
        $time = (string) $time;
        $ctx->stash('_estraier_search_time', $time);
        $ctx->__stash['vars'][$prefix . 'totaltime'] = $time;
        $ctx->stash('_estraier_search_hit', $hit);
        $ctx->stash('_estraier_counter', 0);
        $counter = 0;
        $max = count($records);
        $ctx->__stash['vars'][$prefix . 'resultcount'] = $max;
        $ctx->stash('_estraier_count', $max);
        $ctx->__stash['vars'][$prefix . 'totalresult'] = $max;
        if ($limit > 0) {
            $ctx->__stash['vars'][$prefix . 'pagertotal'] = ceil($hit / $limit);
            if ($offset + $limit < $hit) {
                $ctx->__stash['vars'][$prefix . 'nextoffset'] = $offset + $limit;
            }
            if ($offset) {
                $prevoffset = $offset - $limit;
                if ($prevoffset < 0) {
                    $prevoffset = 0;
                }
                $ctx->__stash['vars'][$prefix . 'prevoffset'] = $prevoffset;
            }
        }
        if (isset($args['shuffle'])) {
            if ($args['shuffle']) {
                $_count = count($records);
                $_records = array();
                for ($i = 0; $i < $_count; $i++) {
                    $_records[] = $records[$i];
                }
                shuffle($_records);
                $records = $_records;
            }
        }
        $ctx->stash('_estraier_search_results', $records);
    } else {
        $records = $ctx->stash('_estraier_search_results');
        $meta = $ctx->stash('_estraier_search_meta');
        $counter = $ctx->stash('_estraier_counter');
        $hit = $ctx->stash('_estraier_search_hit');
        $time = $ctx->stash('_estraier_search_time');
        $max = $ctx->stash('_estraier_count');
    }
    if ($counter < $max) {
        $record = $records[$counter];
        $attrs = $record->attribute;
        foreach ($attrs as $attr) {
            $val = $attr->attributes()->value[0];
            $val = (string) $val;
            $name = $attr->attributes()->name;
            $name = (string) $name;
            $ctx->__stash['vars'][$prefix . $name] = $val;
        }
        $ctx->stash('_estraier_record', $record);
        $_uri = $record->attributes()->uri;
        $_uri = (string) $_uri;
        $_id = $record->attributes()->id;
        $_id = (string) $_id;
        $ctx->__stash['vars']['estraier_uri'] = $_uri;
        $ctx->__stash['vars']['estraier_id'] = $_id;
        $ctx->__stash['vars'][$prefix . 'snippet'] = (string) $record->snippet;
        $count = $counter + 1;
        $ctx->stash('_estraier_counter', $count);
        $ctx->__stash['vars']['__total__'] = $hit;
        $ctx->__stash['vars']['__counter__'] = $count;
        $ctx->__stash['vars']['__odd__'] = $count % 2 == 1;
        $ctx->__stash['vars']['__even__'] = $count % 2 == 0;
        $ctx->__stash['vars']['__first__'] = $count == 1;
        $ctx->__stash['vars']['__last__'] = $count == count($records);
        $repeat = TRUE;
    } else {
        $ctx->restore($localvars);
        $repeat = FALSE;
    }
    return $content;
}
function smarty_block_mtcommentreplies($args, $content, &$ctx, &$repeat)
{
    $localvars = array(array('comments', 'comment_order_num', 'comment', 'current_timestamp', 'commenter', 'blog', 'blog_id', '_comment_replies_tokens', 'conditional', 'else_content'), common_loop_vars());
    $token_fn = $ctx->stash('_comment_replies_tokens');
    if (!isset($content)) {
        $token_fn = $args['token_fn'];
        $comment = $ctx->stash('comment');
        if (!$comment) {
            $repeat = false;
            return '';
        }
        $args['comment_id'] = $comment->comment_id;
        $comments = $ctx->mt->db()->fetch_comment_replies($args);
        if (!$comments) {
            $repeat = false;
            return '';
        }
        $ctx->localize($localvars);
        $ctx->stash('comments', $comments);
        $ctx->stash('_comment_replies_tokens', $token_fn);
        $counter = 0;
    } else {
        $comments = $ctx->stash('comments');
        $counter = $ctx->stash('comment_order_num');
    }
    $ctx->stash('conditional', empty($comments) ? 0 : 1);
    if (empty($comments)) {
        $ret = $ctx->_hdlr_if($args, $content, $ctx, $repeat, 0);
        if (!$repeat) {
            $ctx->restore($localvars);
        }
        return $ret;
    }
    if ($counter < count($comments)) {
        $blog_id = $ctx->stash('blog_id');
        $comment = $comments[$counter];
        if ($comment->comment_commenter_id) {
            $commenter = $comment->commenter();
            $ctx->stash('commenter', $commenter);
        } else {
            $ctx->__stash['commenter'] = null;
        }
        if ($blog_id != $comment->comment_blog_id) {
            $blog_id = $comment->comment_blog_id;
            $ctx->stash('blog_id', $blog_id);
            $ctx->stash('blog', $comment->blog());
        }
        $ctx->stash('comment', $comment);
        $ctx->stash('current_timestamp', $comment->comment_created_on);
        $ctx->stash('comment_order_num', $counter + 1);
        $repeat = true;
        $count = $counter + 1;
        $ctx->__stash['vars']['__counter__'] = $count;
        $ctx->__stash['vars']['__odd__'] = $count % 2 == 1;
        $ctx->__stash['vars']['__even__'] = $count % 2 == 0;
        $ctx->__stash['vars']['__first__'] = $count == 1;
        $ctx->__stash['vars']['__last__'] = $count == count($comments);
    } else {
        $ctx->restore($localvars);
        $repeat = false;
    }
    return $content;
}
Example #17
0
function smarty_block_mtassets($args, $content, &$ctx, &$repeat)
{
    $localvars = array(array('_assets', 'asset', 'asset_first_in_row', 'asset_last_in_row', 'conditional', 'else_content'), common_loop_vars());
    $counter = 0;
    if (isset($args['sort_by']) && $args['sort_by'] == 'score' && !isset($args['namespace'])) {
        return $ctx->error($ctx->mt->translate('sort_by="score" must be used together with a namespace.'));
    }
    if (!isset($content)) {
        $ctx->localize($localvars);
        $blog_id = $ctx->stash('blog_id');
        $args['blog_id'] = $ctx->stash('blog_id');
        $tag = $ctx->this_tag();
        if ($tag == 'mtentryassets' || $tag == 'mtpageassets') {
            $entry = $ctx->stash('entry');
            if ($entry) {
                $args['entry_id'] = $entry->entry_id;
            }
        }
        $args['exclude_thumb'] = 1;
        $ts = $ctx->stash('current_timestamp');
        $tse = $ctx->stash('current_timestamp_end');
        if ($ts && $tse) {
            $args['current_timestamp'] = $ts;
            $args['current_timestamp_end'] = $tse;
        }
        $assets = $ctx->mt->db()->fetch_assets($args);
        $ctx->stash('_assets', $assets);
    } else {
        $assets = $ctx->stash('_assets');
        $counter = $ctx->stash('_assets_counter');
    }
    $ctx->stash('conditional', empty($assets) ? 0 : 1);
    if (empty($assets)) {
        $ret = $ctx->_hdlr_if($args, $content, $ctx, $repeat, 0);
        if (!$repeat) {
            $ctx->restore($localvars);
        }
        return $ret;
    }
    if ($counter < count($assets)) {
        $per_row = 1;
        if (isset($args['assets_per_row'])) {
            $per_row = $args['assets_per_row'];
        }
        $asset = $assets[$counter];
        $ctx->stash('asset', $asset);
        $ctx->stash('_assets_counter', $counter + 1);
        $ctx->stash('asset_first_in_row', $counter % $per_row == 0);
        $ctx->stash('asset_last_in_row', ($counter + 1) % $per_row == 0);
        if ($counter + 1 >= count($assets)) {
            $ctx->stash('asset_last_in_row', true);
        }
        $repeat = true;
        $count = $counter + 1;
        $ctx->__stash['vars']['__counter__'] = $count;
        $ctx->__stash['vars']['__odd__'] = $count % 2 == 1;
        $ctx->__stash['vars']['__even__'] = $count % 2 == 0;
        $ctx->__stash['vars']['__first__'] = $count == 1;
        $ctx->__stash['vars']['__last__'] = $count == count($assets);
    } else {
        $ctx->restore($localvars);
        $repeat = false;
    }
    return $content;
}
function smarty_block_mtarchivelist($args, $content, &$ctx, &$repeat)
{
    $localvars = array(array('current_archive_type', 'current_timestamp', 'current_timestamp_end', 'entries', 'archive_count', '_archive_list_num', '_archive_list_results', 'entry', 'ArchiveListHeader', 'ArchiveListFooter', 'inside_archive_list', 'category', 'author'), common_loop_vars());
    if (!isset($content)) {
        $blog = $ctx->stash('blog');
        $at = $args['type'];
        $at or $at = $args['archive_type'];
        $at or $at = $ctx->stash('current_archive_type');
        if ($at) {
            # do nothing if we have an $at
        } elseif ($blog_at = $blog->blog_archive_type_preferred) {
            $at = $blog_at;
        } elseif (empty($at)) {
            $types = explode(',', $blog->blog_archive_type);
            $at = $types[0];
        }
        if (empty($at) || $at == 'None') {
            $repeat = false;
            return '';
        }
        if ($at != 'Category') {
            try {
                $ar = ArchiverFactory::get_archiver($at);
            } catch (Exception $e) {
                $repeat = false;
                return '';
            }
        }
        $ctx->localize($localvars);
        $ctx->stash('current_archive_type', $at);
        ## If we are producing a Category archive list, don't bother to
        ## handle it here--instead hand it over to <MTCategories>.
        if ($at == 'Category') {
            require_once "block.mtcategories.php";
            return smarty_block_mtcategories($args, $content, $ctx, $repeat);
        }
        $blog_id = $blog->blog_id;
        $args['sort'] = 'created_on';
        $args['direction'] = 'descend';
        $args['archive_type'] = $at;
        $args['blog_id'] = $blog_id;
        $archive_list_results = $ar->get_archive_list($args);
        $ctx->stash('_archive_list_results', $archive_list_results);
        # allow <MTEntries> to load them
        $ctx->stash('entries', null);
        $ctx->stash('inside_archive_list', true);
        $i = 0;
    } else {
        $at = $ctx->stash('current_archive_type');
        $archive_list_results = $ctx->stash('_archive_list_results');
        $i = $ctx->stash('_archive_list_num');
    }
    if ($at == 'Category') {
        $content = smarty_block_mtcategories($args, $content, $ctx, $repeat);
        if (!$repeat) {
            $ctx->restore($localvars);
        }
        return $content;
    }
    if ($i < count($archive_list_results)) {
        if (empty($ar)) {
            $ar = ArchiverFactory::get_archiver($at);
        }
        $grp = $archive_list_results[$i];
        $ar->prepare_list($grp);
        if ($at == 'Individual' || $at == 'Page') {
            $cnt = 1;
        } else {
            $cnt = array_shift($grp);
        }
        if ($at == 'Individual' || $at == 'Page') {
            $entry = $ctx->stash('entry');
            $start = $end = $entry->entry_authored_on;
        } else {
            list($start, $end) = $ar->get_range($grp);
        }
        $start = preg_replace('/[^0-9]/', '', $start);
        $end = preg_replace('/[^0-9]/', '', $end);
        $ctx->stash('current_timestamp', $start);
        $ctx->stash('current_timestamp_end', $end);
        $ctx->stash('archive_count', $cnt);
        $ctx->stash('_archive_list_num', $i + 1);
        $ctx->stash('ArchiveListHeader', $i == 0);
        $ctx->stash('ArchiveListFooter', $i + 1 == count($archive_list_results));
        $repeat = true;
        $count = $i + 1;
        $ctx->__stash['vars']['__counter__'] = $count;
        $ctx->__stash['vars']['__odd__'] = $count % 2 == 1;
        $ctx->__stash['vars']['__even__'] = $count % 2 == 0;
        $ctx->__stash['vars']['__first__'] = $count == 1;
        $ctx->__stash['vars']['__last__'] = $count == count($archive_list_results);
        $i++;
    } else {
        $ctx->restore($localvars);
        $repeat = false;
    }
    return $content;
}
function smarty_block_mtobjectloop($args, $content, &$ctx, &$repeat)
{
    $_classname = $args['model'];
    require_once 'class.mt_' . strtolower($_classname) . '.php';
    $_classname = ucfirst($_classname);
    $_object = new $_classname();
    $_datasource = $_object->_table;
    $_datasource = str_replace('mt_', '', $_datasource);
    $deniedobjects = $ctx->mt->config('DeniedLoopObjects');
    if (!is_string($deniedobjects)) {
        $deniedobjects = 'permission,config,log,session';
    }
    $serialized = $ctx->mt->config('SerializedColumns');
    if (!is_string($serialized)) {
        $serialized = 'author_list_prefs,author_widgets';
    }
    if ($serialized) {
        $serialized = preg_split('/\\s*,\\s*/', $serialized);
    }
    if ($deniedobjects) {
        $deniedobjects = preg_split('/\\s*,\\s*/', $deniedobjects);
        if (in_array($_datasource, $deniedobjects)) {
            $repeat = FALSE;
            return '';
        }
    }
    $this_tag = strtolower($ctx->this_tag());
    $customfields = array();
    foreach ($args as $key => $value) {
        if (strpos($key, 'field___') === 0) {
            $custom_field_value = $args[$key];
            $key = str_replace('field___', '', $key);
            $customfields[$key] = $custom_field_value;
        }
    }
    $meta_fields = array();
    $meta_info = $_object->get_meta_info($_datasource);
    foreach ($meta_info as $meta => $_type) {
        $meta = str_replace('field.', $_datasource . '_', $meta);
        $meta_fields[] = $meta;
    }
    $attr_names = $_object->GetAttributeNames();
    array_push($attr_names, $_datasource . '_tags');
    $localvars = array($attr_names, common_loop_vars(), array("_{$_datasource}_counter"), $meta_fields);
    if (!isset($content)) {
        $ctx->localize($localvars);
        $ctx->stash($_datasource . '_old_vars', $old_vars);
        if (isset($args['sort_by'])) {
            $sort_by = $args['sort_by'];
            unset($args['sort_by']);
        }
        if (isset($args['sort_order'])) {
            $sort_order = $args['sort_order'];
            unset($args['sort_order']);
        }
        if (isset($args['limit'])) {
            $limit = $args['limit'];
            unset($args['limit']);
        }
        if (isset($args['offset'])) {
            $offset = $args['offset'];
            unset($args['offset']);
        }
        if (!$sort_order) {
            $sort_order = 'ascend';
        }
        $where = '';
        $_blog_id;
        $field = array();
        if (isset($args['operator'])) {
            $op = $args['operator'];
        }
        if (!$op) {
            $op = '=';
        } else {
            if ($op == 'not_like') {
                $op = 'not like';
            }
        }
        $ctx->mt->db()->escape($op);
        $class_type;
        foreach ($args as $key => $value) {
            if ($key != '_object' && $key != '_datasource') {
                if ($_object->has_column($key)) {
                    if ($key == 'class') {
                        if ($value == '*') {
                            continue;
                        }
                        $class_type = $value;
                    }
                    if ($where) {
                        $where .= " AND ";
                    }
                    if (is_array($value)) {
                        $_value = array();
                        foreach ($value as $var) {
                            $var = $ctx->mt->db()->escape($var);
                            array_push($_value, $var);
                        }
                        $vars = implode(',', $_value);
                        $where .= " {$_datasource}_{$key} in ({$vars}) ";
                    } else {
                        $value = $ctx->mt->db()->escape($value);
                        if ($key == 'class') {
                            $where .= " {$_datasource}_{$key} = '{$value}' ";
                        } else {
                            $where .= " {$_datasource}_{$key} {$op} '{$value}' ";
                        }
                    }
                    if ($key == 'blog_id') {
                        $_blog_id = $value;
                    }
                }
            }
        }
        if ($_object->has_column('class')) {
            if (!isset($args['class'])) {
                $class = strtolower($_classname);
                $class = $ctx->mt->db()->escape($class);
                if ($where) {
                    $where .= " AND ";
                }
                $where .= " {$_datasource}_class='{$class}' ";
            }
        }
        $blog_filter;
        if ($_blog_id) {
            if ($where) {
                $where .= " AND ";
            }
            $where .= " {$_datasource}_blog_id = {$_blog_id} ";
            $blog_filter = "={$_blog_id}";
        } else {
            if ($_datasource != 'blog') {
                if ($_object->has_column('blog_id')) {
                    $include_blogs = $ctx->mt->db()->include_exclude_blogs($args);
                    $blog_filter = $include_blogs;
                    if ($include_blogs) {
                        if ($where) {
                            $where .= " AND ";
                        }
                        $where .= " {$_datasource}_blog_id {$include_blogs} ";
                    }
                }
            }
        }
        if (isset($args['tags']) or isset($args['tag'])) {
            $tag_arg = isset($args['tag']) ? $args['tag'] : $args['tags'];
            $_args = array();
            $_args['tags'] = $tag_arg;
            $_args['_datasource'] = $_datasource;
            require_once 'class.getobjecttags.php';
            $get_object_tags = new GetObjectTags();
            if ($tags = $get_object_tags->fetch_object_tags($ctx, $_args, $blog_filter)) {
                if (isset($args['include_blogs']) or isset($args['exclude_blogs'])) {
                    $blog_ctx_arg = isset($args['include_blogs']) ? array('include_blogs' => $args['include_blogs']) : array('exclude_blogs' => $args['exclude_blogs']);
                    if (isset($args['include_blogs']) && isset($args['include_with_website'])) {
                        $blog_ctx_arg = array_merge($blog_ctx_arg, array('include_with_website' => $args['include_with_website']));
                    }
                }
                $tag_list = array();
                foreach ($tags as $tag) {
                    $tag_list[] = $tag->tag_id;
                }
                if (!count($tag_list)) {
                    $ctx->restore($localvars);
                    $repeat = FALSE;
                    return '';
                }
                $tag_arg = $blog_ctx_arg;
                $tag_arg['tag_id'] = $tag_list;
                $tag_arg['datasource'] = $_datasource;
                $objecttag = $ctx->mt->db()->fetch_objecttags($tag_arg);
                $object_list = array();
                if ($objecttag) {
                    foreach ($objecttag as $ot) {
                        $object_list[$ot->objecttag_object_id] = 1;
                    }
                }
                if (count($object_list)) {
                    $object_list = implode(',', array_keys($object_list));
                    if ($where) {
                        $where .= " AND ";
                    }
                    $where .= " {$_datasource}_id in ({$object_list}) ";
                } else {
                    $ctx->restore($localvars);
                    $repeat = FALSE;
                    return '';
                }
            } else {
                $ctx->restore($localvars);
                $repeat = FALSE;
                return '';
            }
        }
        if (!$where) {
            $where = '1=1';
        }
        if ($sort_by) {
            $sort_by = $ctx->mt->db()->escape($sort_by);
            $where .= " order by {$_datasource}_{$sort_by}";
            if ($sort_order == 'ascend') {
                $where .= " ASC ";
            } else {
                $where .= " DESC ";
            }
        }
        $extras = array();
        if ($offset) {
            $extras['offset'] = $offset;
        }
        if ($limit) {
            $extras['limit'] = $limit;
        }
        if (count($customfields)) {
            $meta_join_num = 1;
            if (!empty($meta_info)) {
                foreach ($customfields as $name => $value) {
                    if (!isset($meta_info['field.' . $name])) {
                        // TODO :: Asset Object
                        if (isset($args['column_def']) && $args['column_def']) {
                            $meta_info['field.' . $name] = $args['column_def'];
                        } else {
                            if ($class_type) {
                                $basenames = array();
                                foreach ($customfields as $_name => $_value) {
                                    $_name = $ctx->mt->db()->escape($_name);
                                    $basenames[] = "'{$_name}'";
                                }
                                global $customfield_types;
                                require_once 'class.mt_field.php';
                                $_field = new Field();
                                $blog_ids = array(0, $ctx->stash('blog')->id);
                                $blog_ids = implode(',', $blog_ids);
                                $basenames = implode(',', $basenames);
                                $name = $ctx->mt->db()->escape($name);
                                $field = $_field->Find("field_blog_id in ({$blog_ids}) AND field_basename in ({$basenames})\n                                    AND field_obj_type='{$class_type}'", FALSE, FALSE, array('limit' => 1));
                                if ($field) {
                                    $field = $field[0];
                                    $field = $customfield_types[$field->field_type];
                                    $meta_info['field.' . $name] = $field['column_def'];
                                }
                            }
                        }
                    }
                    if (isset($meta_info['field.' . $name])) {
                        $meta_col = $meta_info['field.' . $name];
                        $value = $ctx->mt->db()->escape($value);
                        $table = "mt_{$_datasource}_meta {$_datasource}_meta{$meta_join_num}";
                        $extras['join'][$table] = array('condition' => "({$_datasource}_meta{$meta_join_num}.{$_datasource}_meta_{$_datasource}_id = {$_datasource}_id\n                                and {$_datasource}_meta{$meta_join_num}.{$_datasource}_meta_type = 'field.{$name}'\n                                and {$_datasource}_meta{$meta_join_num}.{$_datasource}_meta_{$meta_col} = '{$value}')\n");
                        $meta_join_num++;
                    }
                }
            }
        }
        if (!isset($args['no_filter'])) {
            $ctx->stash('filter_where', $where);
            $ctx->stash('filter_extras', $extras);
            $ctx->stash('filter_args', $args);
            $ctx->stash('filter_this_tag', $this_tag);
            require_once 'class.tagfilter.php';
            $filter = new TagFilter();
            $filter->tag_filter('tag_filter_' . $this_tag, $ctx->mt, $ctx, $args);
            $where = $ctx->stash('filter_where');
            $extras = $ctx->stash('filter_extras');
            $args = $ctx->stash('filter_args');
        }
        if (isset($args['debug']) && $args['debug']) {
            echo htmlspecialchars($where);
        }
        $objects = $_object->Find($where, FALSE, FALSE, $extras);
        if (isset($args['shuffle']) && $args['shuffle']) {
            shuffle($objects);
        }
        $counter = 0;
        $ctx->stash($_datasource . '_multi', $objects);
    } else {
        $objects = $ctx->stash($_datasource . '_multi');
        $counter = $ctx->stash("_{$_datasource}_counter");
    }
    if (!count($objects)) {
        $ctx->restore($localvars);
        $repeat = FALSE;
        return '';
    }
    $lastn = count($objects);
    $methods = array();
    $paths = array();
    $blog_paths = array();
    $ctx_blogs = array();
    $blog = $ctx->stash('blog');
    $ctx_blogs[$blog->id] = $blog;
    if ($_datasource == 'blog') {
        $methods = array('blog_site_path', 'blog_site_url', 'blog_archive_path', 'blog_archive_url');
    } else {
        if ($_datasource == 'asset') {
            $paths = array('asset_url', 'asset_file_path');
            $blog_paths[$blog->id] = _objectloop_get_blog_paths($blog, $args, $ctx);
        }
    }
    if ($counter < $lastn) {
        $data = $objects[$counter];
        $values = $data->GetArray();
        if ($data->has_column('blog_id')) {
            $data_blog_id = $data->blog_id;
            if ($blog->id != $data_blog_id) {
                if (!isset($ctx_blogs[$data_blog_id])) {
                    $data_blog = $ctx->mt->db()->fetch_blog($data_blog_id);
                    $ctx_blogs[$data_blog_id] = $data_blog;
                }
                $ctx->stash('blog', $ctx_blogs[$data_blog_id]);
            } else {
                $ctx->stash('blog', $ctx_blogs[$blog->id]);
            }
        }
        if ($data->has_meta()) {
            $meta = $data->get_meta_info($_datasource);
            if (is_array($meta)) {
                foreach ($meta as $key => $value) {
                    $field_name = $_datasource . '_' . str_replace('.', '_', $key);
                    $values[$field_name] = $data->{$key};
                }
            }
        }
        if (!isset($args['no_tags'])) {
            $_args = array();
            $_args['object_id'] = $data->id;
            $_args['_datasource'] = $_datasource;
            require_once 'class.getobjecttags.php';
            $get_object_tags = new GetObjectTags();
            if ($tags = $get_object_tags->fetch_object_tags($ctx, $_args)) {
                $_tags = array();
                foreach ($tags as $_t) {
                    $_tags[] = $_t->tag_name;
                }
                $ctx->__stash['vars'][$_datasource . '_tags'] = $_tags;
            } else {
                unset($ctx->__stash['vars'][$_datasource . '_tags']);
            }
        }
        foreach ($values as $key => $value) {
            if (!preg_match('/password|secret/i', $key)) {
                if (in_array($key, $methods)) {
                    $_key = preg_replace('/.*?_/', '', $key);
                    $value = $data->{$_key}();
                } else {
                    if (in_array($key, $paths)) {
                        if (isset($blog_paths[$ctx->stash('blog')->id])) {
                            $_blog_paths = $blog_paths[$ctx->stash('blog')->id];
                        } else {
                            $_blog_paths = _objectloop_get_blog_paths($ctx->stash('blog'), $args, $ctx);
                            $blog_paths[$ctx->stash('blog')->id] = $_blog_paths;
                        }
                        $static_url = $_blog_paths['static_url'];
                        $site_path = $_blog_paths['site_path'];
                        $site_url = $_blog_paths['site_url'];
                        $archive_url = $_blog_paths['archive_url'];
                        $value = preg_replace('/^%s\\//', $static_url, $value);
                        if ($key == 'asset_file_path') {
                            $value = preg_replace('/^%r/', $site_path, $value);
                        } else {
                            $value = preg_replace('/^%r/', $site_url, $value);
                            if ($archive_url) {
                                $value = preg_replace('/^%a/', $archive_url, $value);
                            }
                        }
                    }
                }
                if (in_array($key, $serialized)) {
                    $value = preg_replace("/^BIN:/", '', $value);
                    $value = $ctx->mt->db()->unserialize($value);
                }
                $ctx->__stash['vars'][$key] = $value;
            }
        }
        $ctx->stash($_datasource, $data);
        $ctx->stash("_{$_datasource}_counter", $counter + 1);
        $count = $counter + 1;
        $ctx->__stash['vars']['__counter__'] = $count;
        $ctx->__stash['vars']['__odd__'] = $count % 2 == 1;
        $ctx->__stash['vars']['__even__'] = $count % 2 == 0;
        $ctx->__stash['vars']['__first__'] = $count == 1;
        $ctx->__stash['vars']['__last__'] = $count == $lastn;
        $repeat = TRUE;
    } else {
        $ctx->restore($localvars);
        $ctx->stash($_datasource, NULL);
        $repeat = FALSE;
    }
    return $content;
}