2008-07-20 09:18:38 +01:00
< ? php
/*
* Laconica - a distributed open - source microblogging tool
* Copyright ( C ) 2008 , Controlez - Vous , Inc .
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation , either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU Affero General Public License for more details .
*
* You should have received a copy of the GNU Affero General Public License
* along with this program . If not , see < http :// www . gnu . org / licenses />.
*/
if ( ! defined ( 'LACONICA' )) { exit ( 1 ); }
2009-01-19 18:21:14 +00:00
class TagAction extends Action
2008-12-23 19:49:23 +00:00
{
2009-01-19 18:21:14 +00:00
function prepare ( $args )
2008-12-23 19:33:23 +00:00
{
2009-01-19 18:21:14 +00:00
parent :: prepare ( $args );
2009-01-26 14:03:38 +00:00
$taginput = $this -> trimmed ( 'tag' );
$this -> tag = common_canonical_tag ( $taginput );
2008-12-23 19:19:07 +00:00
2009-01-19 18:21:14 +00:00
if ( ! $this -> tag ) {
common_redirect ( common_local_url ( 'publictagcloud' ), 301 );
return false ;
2008-12-23 19:19:07 +00:00
}
2009-01-26 14:03:38 +00:00
if ( $this -> tag != $taginput ) {
2009-04-01 20:30:59 +01:00
common_redirect ( common_local_url ( 'tag' , array ( 'tag' => $this -> tag )),
301 );
return false ;
2009-01-26 14:03:38 +00:00
}
2009-01-19 18:21:14 +00:00
$this -> page = ( $this -> arg ( 'page' )) ? ( $this -> arg ( 'page' ) + 0 ) : 1 ;
2009-02-11 16:37:50 +00:00
2009-02-06 00:16:10 +00:00
common_set_returnto ( $this -> selfUrl ());
2009-02-11 16:37:50 +00:00
2009-01-19 18:21:14 +00:00
return true ;
2008-12-23 19:19:07 +00:00
}
2009-04-15 00:03:19 +01:00
function showSections ()
{
$pop = new PopularNoticeSection ( $this );
$pop -> show ();
2009-05-15 20:04:58 +01:00
$notice_tag = new Notice_tag ;
$query = 'select file_id, count(file_id) as c from notice_tag join file_to_post on post_id = notice_id where tag="' . $notice_tag -> escape ( $this -> tag ) . '" group by file_id order by c desc' ;
$notice_tag -> query ( $query );
$this -> elementStart ( 'ol' );
while ( $notice_tag -> fetch ()) {
$this -> elementStart ( 'li' );
$this -> element ( 'a' , array ( 'class' => 'attachment' , 'href' => common_local_url ( 'attachment' , array ( 'attachment' => $notice_tag -> file_id ))), " Attachment tagged { $notice_tag -> c } times " );
$this -> elementEnd ( 'li' );
}
$this -> elementEnd ( 'ol' );
}
2009-04-15 00:03:19 +01:00
2009-01-19 18:21:14 +00:00
function title ()
2008-12-23 19:33:23 +00:00
{
2009-01-19 18:21:14 +00:00
if ( $this -> page == 1 ) {
return sprintf ( _ ( " Notices tagged with %s " ), $this -> tag );
} else {
return sprintf ( _ ( " Notices tagged with %s, page %d " ),
$this -> tag ,
$this -> page );
2008-12-23 19:19:07 +00:00
}
}
2009-01-19 18:21:14 +00:00
function handle ( $args )
2008-12-23 19:33:23 +00:00
{
2009-01-19 18:21:14 +00:00
parent :: handle ( $args );
$this -> showPage ();
2008-12-23 19:19:07 +00:00
}
2009-02-11 16:37:50 +00:00
function getFeeds ()
2008-12-23 19:33:23 +00:00
{
2009-02-11 16:37:50 +00:00
return array ( new Feed ( Feed :: RSS1 ,
common_local_url ( 'tagrss' , array ( 'tag' => $this -> tag )),
sprintf ( _ ( 'Feed for tag %s' ), $this -> tag )));
2008-12-23 19:19:07 +00:00
}
2009-02-08 13:02:51 +00:00
/**
* Output document relationship links
*
* @ return void
*/
function showRelationshipLinks ()
{
2009-02-10 08:42:01 +00:00
$this -> sequenceRelationships ( $this -> page > 1 , $this -> count > NOTICES_PER_PAGE , // FIXME
$this -> page , 'tag' , array ( 'tag' => $this -> tag ));
2009-02-08 13:02:51 +00:00
}
2009-01-19 18:21:14 +00:00
function showPageNotice ()
2008-12-23 19:19:07 +00:00
{
2009-01-19 18:21:14 +00:00
return sprintf ( _ ( 'Messages tagged "%s", most recent first' ), $this -> tag );
2008-12-23 19:19:07 +00:00
}
2009-01-19 18:21:14 +00:00
function showContent ()
2008-12-23 19:33:23 +00:00
{
2009-01-19 18:21:14 +00:00
$notice = Notice_tag :: getStream ( $this -> tag , (( $this -> page - 1 ) * NOTICES_PER_PAGE ), NOTICES_PER_PAGE + 1 );
2008-12-23 19:19:07 +00:00
2009-01-19 18:21:14 +00:00
$nl = new NoticeList ( $notice , $this );
2008-09-28 19:15:03 +01:00
2009-01-19 18:21:14 +00:00
$cnt = $nl -> show ();
2008-07-20 09:18:38 +01:00
2009-01-19 18:21:14 +00:00
$this -> pagination ( $this -> page > 1 , $cnt > NOTICES_PER_PAGE ,
$this -> page , 'tag' , array ( 'tag' => $this -> tag ));
2008-12-23 19:19:07 +00:00
}
2009-04-11 03:47:40 +01:00
2009-04-13 20:49:26 +01:00
function isReadOnly ( $args )
2009-04-11 03:47:40 +01:00
{
return true ;
}
2008-07-20 09:18:38 +01:00
}