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; }
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; }
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; }
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; }
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; }
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; }
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; }