Example #1
0
	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;
	}
Example #2
0
 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;
 }
Example #3
0
	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;
	}
Example #4
0
    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;
        }
    }
Example #5
0
	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',
		));
	}