public function get_content ($query, $perpage, $page, $start) { $names = Database::set_counter()->get_vector( 'user', array('id', 'username'), "last_draw != '0000-00-00 00:00:00' order by last_draw desc limit $start, $perpage" ); $authors = Database::get_full_table( 'meta', Database::array_in('name', $names), $names ); $items = array(); $names = array_values($names); foreach ($authors as $author) { $order_id = array_search($author['name'], $names); $items[$order_id] = $author; } ksort($items); $return = array(); $aliases = array(); foreach ($items as $id => $item) { $return[$id] = new Item_Author($item); $aliases[] = $item['alias']; } unset ($items); $condition = Database::make_search_condition('meta', array(array('+', $aliases, 'author'))); $arts = Database::get_table('art', array('id', 'user_id', 'meta', 'name', 'comments'), $condition.' and area="main" order by date desc' ); foreach ($return as $id => $gallery) { foreach ($arts as $art_id => $art) { if (strpos($art['meta'], 'author__'.$gallery['alias'])) { $gallery->add_to('images', $art); unset($arts[$art_id]); } if (count($gallery['images']) > 4) { break; } } } return $return; }
protected function get_items() { $start = ($this->page - 1) * $this->per_page; $query = Database::set_counter()->limit($this->per_page, $start); if ($this->mode == 'update') { $items = $this->get_items_update($query); } else { $items = $this->get_items_post($query); } $this->data['items'] = $items; $this->data['sorters'] = $this->sorters; $this->data['mode'] = $this->mode; $this->data['active_menu'] = $this->active_menu_item; }
public function get_content ($query, $perpage, $page, $start) { $listing_condition = $this->build_listing_condition($query); $condition = $listing_condition . " order by date desc limit $start, $perpage"; $items = Database::set_counter()->get_full_vector('art', $condition); $index = array(); $return = array(); foreach ($items as $id => $item) { $return[$id] = new Item_Thumbnail($item); $index[$id] = $item['meta']; } unset ($items); $meta = Meta::prepare_meta($index); foreach ($this->items as $id => & $item) { $item = Transform_Item::merge($item, $meta[$id]); } return $return; }
function get_data() { if ($this->template != 'slideshow') { global $url; global $error; global $sets; global $def; if (is_numeric($url[2])) { $return['display'] = array('booru_single', 'comments'); $return['art'] = $this->get_art(1, 'id=' . $url[2] . ' and area != "deleted"'); $url['area'] = $return['art'][0]['area']; $return['comments'] = $this->get_comments($url[1], $url[2], is_numeric($url[5]) ? $url[5] : ($url[4] == 'all' ? false : 1)); $return['navi']['curr'] = $url[4] == 'all' ? 'all' : max(1, $url[5]); $return['navi']['all'] = true; $return['navi']['name'] = "Страница комментариев"; $return['navi']['meta'] = $url[2] . '/comments/'; $return['navi']['start'] = max($return['navi']['curr'] - 5, 2); $return['navi']['last'] = ceil($return['comments']['number'] / $sets['pp']['comment_in_post']); $this->side_modules['top'] = array(); $return['art'][0]['rating'] = $this->get_rating($url[2]); $return['art'][0]['packs'] = $this->get_packs($url[2]); $return['art'][0]['pool'] = $this->get_pools($url[2]); } elseif ($url[2] != 'pool' && $url[2] != 'cg_packs' && $url[2] != 'download') { $return['display'] = array('booru_page', 'navi'); if ($url[2] == 'page' || !$url[2]) { $area = 'area = "' . $url['area'] . '"'; $return['navi']['curr'] = max(1, $url[3]); if ($sets['art']['sort'] == 'tag-desc') { $return['art']['thumbs'] = $this->get_art(($return['navi']['curr'] - 1) * $sets['pp']['art'] . ', ' . $sets['pp']['art'], $area, 'order by (length(tag) - length(replace(tag,\'|\',\'\'))) desc'); } elseif ($sets['art']['sort'] == 'tag-asc') { $return['art']['thumbs'] = $this->get_art(($return['navi']['curr'] - 1) * $sets['pp']['art'] . ', ' . $sets['pp']['art'], $area, 'order by (length(tag) - length(replace(tag,\'|\',\'\')))'); } else { $return['art']['thumbs'] = $this->get_art(($return['navi']['curr'] - 1) * $sets['pp']['art'] . ', ' . $sets['pp']['art'], $area); } } elseif ($url[2] == 'date') { $parts = explode('-', $url[3]); if (is_numeric($parts[0] . $parts[1] . $parts[2]) && count($parts) == 3) { $area = 'area = "' . $url['area'] . '" and pretty_date ="' . Transform_Time::ru_month($parts[1]) . ' ' . $parts[2] . ', ' . $parts[0] . '"'; $return['navi']['curr'] = max(1, $url[5]); $return['art']['thumbs'] = $this->get_art(($return['navi']['curr'] - 1) * $sets['pp']['art'] . ', ' . $sets['pp']['art'], $area); $return['navi']['meta'] = $url[2] . '/' . $url[3] . '/'; } else { $error = true; } } elseif ($url[2] != 'mixed') { $this->mixed_parse($url[2] . '=' . $url[3]); $area = 'area = "' . $url['area'] . '" and locate("|' . ($url['tag'] ? $url['tag'] : mysql_real_escape_string($url[3])) . '|",art.' . $url[2] . ')'; $return['navi']['curr'] = max(1, $url[5]); $return['art']['thumbs'] = $this->get_art(($return['navi']['curr'] - 1) * $sets['pp']['art'] . ', ' . $sets['pp']['art'], $area); $return['navi']['meta'] = $url[2] . '/' . $url[3] . '/'; $return['rss'] = $this->make_rss($url[1], $url[2], $url[3]); } else { $area = $this->mixed_make_sql($this->mixed_parse($url[3])); $return['navi']['curr'] = max(1, $url[5]); $return['art']['thumbs'] = $this->get_art(($return['navi']['curr'] - 1) * $sets['pp']['art'] . ', ' . $sets['pp']['art'], $area); $return['navi']['meta'] = $url[2] . '/' . $url[3] . '/'; } $return['navi']['start'] = max($return['navi']['curr'] - 5, 2); $return['navi']['last'] = ceil(obj::db()->sql('select count(id) from art where (' . $area . ')', 2) / $sets['pp']['art']); } else { if ($url[2] == 'pool') { if (is_numeric($url[3])) { if ($url[4] != 'sort') { $return['display'] = array('booru_poolsingle', 'booru_page', 'navi'); } else { $return['display'] = array('booru_poolsingle', 'booru_page'); } $return['pool'] = Database::get_full_row('art_pool', $url[3]); $query = Database::set_counter()->order('order', 'asc'); if ($url[4] != 'sort') { $return['navi']['curr'] = max(1, $url[5]); $return['navi']['meta'] = $url[2] . '/' . $url[3] . '/'; $return['navi']['start'] = max($return['navi']['curr'] - 5, 2); $query->limit(sets::pp('art'), ($return['navi']['curr'] - 1) * sets::pp('art')); } $pool = $query->get_vector('art_in_pool', 'art_id', 'pool_id = ?', $url[3]); $return['pool']['count'] = Database::get_counter(); if ($url[4] != 'sort') { $return['navi']['last'] = ceil($return['pool']['count'] / $sets['pp']['art']); } $where = 'id=' . implode(' or id=', $pool); $pool = array_flip($pool); if ($art = $this->get_art(false, $where, '')) { foreach ($art as $one) { $return['art']['thumbs'][$pool[$one['id']]] = $one; } ksort($return['art']['thumbs']); } $return['rss'] = $this->make_rss($url[1], $url[2], $url[3]); } else { $return['display'] = array('booru_poolpage', 'navi'); $return['navi']['curr'] = max(1, $url[4]); $return['navi']['meta'] = $url[2] . '/'; $return['navi']['start'] = max($return['navi']['curr'] - 5, 2); $return['navi']['last'] = ceil(obj::db()->sql('select count(id) from art_pool', 2) / $sets['pp']['art_pool']); $return['pools'] = obj::db()->sql(' select p.id as id, p.name as name, count(*) as count from art_pool as p left join art_in_pool as a on p.id = a.pool_id group by p.id order by p.sortdate desc limit ' . ($return['navi']['curr'] - 1) * $sets['pp']['art_pool'] . ', ' . $sets['pp']['art_pool'], 'id'); } } elseif ($url[2] == 'cg_packs') { $this->side_modules['top'] = array(); if (is_numeric($url[3])) { $return['display'] = array('booru_pack_single', 'booru_page', 'navi'); $return['navi']['curr'] = max(1, $url[5]); $return['navi']['meta'] = $url[2] . '/' . $url[3] . '/'; $return['navi']['start'] = max($return['navi']['curr'] - 5, 2); $return['navi']['last'] = ceil(obj::db()->sql('select count(*) from art_in_pack where pack_id=' . $url[3], 2) / $sets['pp']['art']); $return['pool'] = obj::db()->sql('select * from art_pack where id=' . $url[3], 1); $return['art']['thumbs'] = $this->get_art(($return['navi']['curr'] - 1) * $sets['pp']['art'] . ', ' . $sets['pp']['art'], 'p.pack_id=' . $url[3], 'order by p.`order`', 'as a left join art_in_pack as p on a.id = p.art_id'); } else { $return['display'] = array('booru_pack_list', 'navi'); $return['navi']['curr'] = max(1, $url[4]); $return['navi']['meta'] = $url[2] . '/'; $return['navi']['start'] = max($return['navi']['curr'] - 5, 2); $return['navi']['last'] = ceil(obj::db()->sql('select count(*) from art_pack where cover != ""', 2) / $sets['pp']['art_cg_pool']); $return['pools'] = obj::db()->sql('select * from art_pack where cover != "" order by `date` desc limit ' . ($return['navi']['curr'] - 1) * $sets['pp']['art_cg_pool'] . ', ' . $sets['pp']['art_cg_pool'], 'id'); } } else { if ($url[3] == 'pack') { if (empty($url[4]) || !is_numeric($url[4])) { $error = true; } else { if (empty($url[5]) || !is_numeric($url[5])) { $pack = obj::db()->sql("select title, weight from art_pack where id = {$url['4']}", 1); if ($pack['weight'] == 0) { $error = true; } else { $this->template = 'download'; $this->side_modules = array(); $name = str_replace(array(' ', ';'), '_', $pack['title']); $file = ROOT_DIR . SL . 'files' . SL . 'pack_cache' . SL . 'pack_' . $url[4] . '.zip'; return array('file' => $file, 'name' => $name . '.zip'); } } else { $this->template = 'download'; $this->side_modules = array(); $art = obj::db()->sql("\n\t\t\t\t\t\t\t\t\tselect a.md5, a.extension, p.filename\n\t\t\t\t\t\t\t\t\tfrom art as a left join art_in_pack as p on a.id = p.art_id\n\t\t\t\t\t\t\t\t\twhere a.id = {$url['5']} and p.pack_id = {$url['4']}", 1); $file = ROOT_DIR . SL . 'images' . SL . 'booru' . SL . 'full' . SL . $art['md5'] . '.' . $art['extension']; if (pathinfo($file, PATHINFO_EXTENSION) == 'jpg') { $type = 'jpeg'; } else { $type = pathinfo($file, PATHINFO_EXTENSION); } return array('file' => $file, 'name' => $art['filename'], 'type' => $type); } } } else { $this->template = 'download'; $this->side_modules = array(); if (pathinfo($url[3], PATHINFO_EXTENSION) == 'jpg') { $type = 'jpeg'; } else { $type = pathinfo($url[3], PATHINFO_EXTENSION); } return array('file' => ROOT_DIR . SL . 'images' . SL . 'booru' . SL . 'full' . SL . $url[3], 'name' => $url[3], 'type' => $type); } } } $return['navi']['base'] = '/art' . ($url['area'] != $def['area'][0] ? '/' . $url['area'] : '') . '/'; return $return; } }
public function single ($query) { $config = Globals::user('comments', 'single_item'); $perpage = $config['per_page']; $display = $config['display']; $inverted = $config['inverted']; if ($query['page'] != 'all') { $page = $query['page']; $start = ($page - 1) * $perpage; $limit = " limit $start, $perpage"; } else { $limit = ""; $page = 1; $start = 0; } $root = $display == 'ladder' ? "and root = 0" : ""; $direction = (bool) $inverted ? "desc" : "asc"; $params = array('deleted', $query['place'], $query['item_id']); $condition = "area != ? and place = ? and item_id = ? $root order by date $direction $limit"; $comments = Database::set_counter()->get_full_vector('comment', $condition, $params, false); $total = Database::get_counter(); $current = (bool) $inverted ? $total - $start : $start; if ($display == 'ladder') { $roots = array_keys($comments); $condition = "area != ? and place = ? and item_id = ? and ". Database::array_in('root', $roots)." order by date"; $params = array_merge($params, $roots); $children = Database::get_full_vector('comment', $condition, $params, false); $this->build_tree($children); } else { $children = array(); } if ($display == 'quotation') { $parents = array(); foreach ($comments as $comment) { $parents[] = $comment['parent']; } $condition = "area != ? and place = ? and item_id = ? and ". Database::array_in('id', $parents); $params = array_merge($params, $parents); $parents = Database::get_full_vector('comment', $condition, $params, false); } else { $parents = array(); } foreach ($comments as $id => $comment) { $item_children = array(); $item_parent = null; foreach ($children as $child_id => $child) { if ($id == $child['root']) { $item_children[$child_id] = new Item_Comment($child, $display); } } foreach ($parents as $parent_id => $parent) { if ($parent_id == $comment['parent']) { $item_parent = new Item_Comment($parent); } } $this->items[$id] = new Item_Comment( array_merge( $comment, array( 'items' => $item_children, 'quotation' => $item_parent, 'index' => (bool) $inverted ? $current-- : ++$current, ) ), $display ); } $this->items[] = new Item_Comment_Navi(array( 'curr_page' => $page, 'pagecount' => ceil($total / $perpage), 'query' => $query, 'module' => 'comments', )); }