2011-04-14 20:53:29 +02:00
< ? php
require 'info.php' ;
function recentposts_build ( $action , $settings ) {
// Possible values for $action:
// - all (rebuild everything, initialization)
// - news (news has been updated)
// - boards (board list changed)
// - post (a post has been made)
2011-05-27 17:43:04 +02:00
$b = new RecentPosts ();
2011-04-16 17:28:25 +02:00
$b -> build ( $action , $settings );
2011-04-14 20:53:29 +02:00
}
// Wrap functions in a class so they don't interfere with normal Tinyboard operations
2011-05-27 17:43:04 +02:00
class RecentPosts {
2011-04-16 17:28:25 +02:00
public function build ( $action , $settings ) {
2011-04-14 20:53:29 +02:00
global $config , $_theme ;
if ( $action == 'all' ) {
2012-02-14 10:46:06 +01:00
copy ( 'templates/themes/recent/recent.css' , $config [ 'dir' ][ 'home' ] . $settings [ 'css' ]);
2011-04-14 20:53:29 +02:00
}
2011-04-16 17:28:25 +02:00
$this -> excluded = explode ( ' ' , $settings [ 'exclude' ]);
2011-04-14 20:53:29 +02:00
if ( $action == 'all' || $action == 'post' )
2012-02-14 10:46:06 +01:00
file_write ( $config [ 'dir' ][ 'home' ] . $settings [ 'html' ], $this -> homepage ( $settings ));
2011-04-14 20:53:29 +02:00
}
// Build news page
2011-04-16 17:28:25 +02:00
public function homepage ( $settings ) {
2011-04-14 20:53:29 +02:00
global $config , $board ;
2012-02-14 10:46:06 +01:00
$recent_images = Array ();
$recent_posts = Array ();
$stats = Array ();
2011-04-14 20:53:29 +02:00
$boards = listBoards ();
2012-02-14 10:46:06 +01:00
$query = '' ;
foreach ( $boards as & $_board ) {
if ( in_array ( $_board [ 'uri' ], $this -> excluded ))
continue ;
$query .= sprintf ( " SELECT *, '%s' AS `board` FROM `posts_%s` WHERE `file` IS NOT NULL AND `file` != 'deleted' AND `thumb` != 'spoiler' UNION ALL " , $_board [ 'uri' ], $_board [ 'uri' ]);
}
$query = preg_replace ( '/UNION ALL $/' , 'ORDER BY `time` DESC LIMIT ' . ( int ) $settings [ 'limit_images' ], $query );
$query = query ( $query ) or error ( db_error ());
2011-04-14 20:53:29 +02:00
2012-02-14 10:46:06 +01:00
while ( $post = $query -> fetch ()) {
openBoard ( $post [ 'board' ]);
2011-04-14 20:53:29 +02:00
2012-02-14 10:46:06 +01:00
// board settings won't be available in the template file, so generate links now
$post [ 'link' ] = $config [ 'root' ] . $board [ 'dir' ] . $config [ 'dir' ][ 'res' ] . sprintf ( $config [ 'file_page' ], ( $post [ 'thread' ] ? $post [ 'thread' ] : $post [ 'id' ])) . '#' . $post [ 'id' ];
$post [ 'src' ] = $config [ 'uri_thumb' ] . $post [ 'thumb' ];
2011-04-14 20:53:29 +02:00
2012-02-14 10:46:06 +01:00
$recent_images [] = $post ;
}
2011-04-14 20:53:29 +02:00
2012-02-14 10:46:06 +01:00
$query = '' ;
foreach ( $boards as & $_board ) {
if ( in_array ( $_board [ 'uri' ], $this -> excluded ))
continue ;
$query .= sprintf ( " SELECT *, '%s' AS `board` FROM `posts_%s` UNION ALL " , $_board [ 'uri' ], $_board [ 'uri' ]);
}
$query = preg_replace ( '/UNION ALL $/' , 'ORDER BY `time` DESC LIMIT ' . ( int ) $settings [ 'limit_posts' ], $query );
$query = query ( $query ) or error ( db_error ());
2011-04-14 20:53:29 +02:00
2012-02-14 10:46:06 +01:00
while ( $post = $query -> fetch ()) {
openBoard ( $post [ 'board' ]);
2011-04-14 20:53:29 +02:00
2012-02-14 10:46:06 +01:00
$post [ 'link' ] = $config [ 'root' ] . $board [ 'dir' ] . $config [ 'dir' ][ 'res' ] . sprintf ( $config [ 'file_page' ], ( $post [ 'thread' ] ? $post [ 'thread' ] : $post [ 'id' ])) . '#' . $post [ 'id' ];
$post [ 'snippet' ] = pm_snippet ( $post [ 'body' ], 30 );
$post [ 'board_name' ] = $board [ 'name' ];
2011-04-14 20:53:29 +02:00
2012-02-14 10:46:06 +01:00
$recent_posts [] = $post ;
}
2011-04-14 20:53:29 +02:00
2012-02-14 10:46:06 +01:00
// Total posts
$query = 'SELECT SUM(`top`) AS `count` FROM (' ;
foreach ( $boards as & $_board ) {
if ( in_array ( $_board [ 'uri' ], $this -> excluded ))
continue ;
$query .= sprintf ( " SELECT MAX(`id`) AS `top` FROM `posts_%s` UNION ALL " , $_board [ 'uri' ]);
}
$query = preg_replace ( '/UNION ALL $/' , ') AS `posts_all`' , $query );
$query = query ( $query ) or error ( db_error ());
$res = $query -> fetch ();
$stats [ 'total_posts' ] = number_format ( $res [ 'count' ]);
// Unique IPs
$query = 'SELECT COUNT(DISTINCT(`ip`)) AS `count` FROM (' ;
foreach ( $boards as & $_board ) {
if ( in_array ( $_board [ 'uri' ], $this -> excluded ))
continue ;
$query .= sprintf ( " SELECT `ip` FROM `posts_%s` UNION ALL " , $_board [ 'uri' ]);
}
$query = preg_replace ( '/UNION ALL $/' , ') AS `posts_all`' , $query );
$query = query ( $query ) or error ( db_error ());
$res = $query -> fetch ();
$stats [ 'unique_posters' ] = number_format ( $res [ 'count' ]);
// Active content
$query = 'SELECT SUM(`filesize`) AS `count` FROM (' ;
foreach ( $boards as & $_board ) {
if ( in_array ( $_board [ 'uri' ], $this -> excluded ))
continue ;
$query .= sprintf ( " SELECT `filesize` FROM `posts_%s` UNION ALL " , $_board [ 'uri' ]);
}
$query = preg_replace ( '/UNION ALL $/' , ') AS `posts_all`' , $query );
$query = query ( $query ) or error ( db_error ());
$res = $query -> fetch ();
$stats [ 'active_content' ] = $res [ 'count' ];
return Element ( 'themes/recent/recent.html' , Array (
'settings' => $settings ,
'config' => $config ,
'boardlist' => createBoardlist (),
'recent_images' => $recent_images ,
'recent_posts' => $recent_posts ,
'stats' => $stats
));
2011-04-14 20:53:29 +02:00
}
};
2011-06-11 09:09:51 +02:00
?>