noticelist.php 6.52 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
<?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); }

class NoticeList {

    var $notice = NULL;

    function __construct($notice) {
        $this->notice = $notice;
    }

    function show() {

		common_element_start('ul', array('id' => 'notices'));

		$cnt = 0;

		while ($this->notice->fetch() && $cnt <= NOTICES_PER_PAGE) {
			$cnt++;

			if ($cnt > NOTICES_PER_PAGE) {
				break;
			}

            $item = $this->new_list_item($this->notice);
            $item->show();
		}

		common_element_end('ul');

        return $cnt;
	}

    function new_list_item($notice) {
        return new NoticeListItem($notice);
    }
}

class NoticeListItem {

    var $notice = NULL;
    var $profile = NULL;

    function __construct($notice) {
        $this->notice = $notice;
		$this->profile = $notice->getProfile();
    }

67
	function show() {
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
        $this->show_start();
        $this->show_fave_form();
        $this->show_author();
        $this->show_content();
        $this->show_start_time_section();
        $this->show_notice_link();
        $this->show_notice_source();
        $this->show_reply_to();
        $this->show_reply_link();
        $this->show_delete_link();
        $this->show_end_time_section();
        $this->show_end();
	}

    function show_start() {
		# XXX: RDFa
		common_element_start('li', array('class' => 'notice_single hentry',
										  'id' => 'notice-' . $this->notice->id));
    }

    function show_fave_form() {
        $user = common_current_user();
		if ($user) {
			if ($user->hasFave($this->notice)) {
				common_disfavor_form($this->notice);
			} else {
				common_favor_form($this->notice);
			}
		}
    }

    function show_author() {
 		common_element_start('span', 'vcard author');
101 102
        $this->show_avatar();
        $this->show_nickname();
103 104 105 106
		common_element_end('span');
    }

    function show_avatar() {
107 108
		$avatar = $this->profile->getAvatar(AVATAR_STREAM_SIZE);
		common_element_start('a', array('href' => $this->profile->profileurl));
109 110 111 112 113
		common_element('img', array('src' => ($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_STREAM_SIZE),
									'class' => 'avatar stream photo',
									'width' => AVATAR_STREAM_SIZE,
									'height' => AVATAR_STREAM_SIZE,
									'alt' =>
114 115
									($this->profile->fullname) ? $this->profile->fullname :
									$this->profile->nickname));
116 117 118 119
		common_element_end('a');
    }

    function show_nickname() {
120
		common_element('a', array('href' => $this->profile->profileurl,
121
								  'class' => 'nickname fn url'),
122
					   $this->profile->nickname);
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
    }

    function show_content() {
		# FIXME: URL, image, video, audio
		common_element_start('p', array('class' => 'content entry-title'));
		if ($this->notice->rendered) {
			common_raw($this->notice->rendered);
		} else {
			# XXX: may be some uncooked notices in the DB,
			# we cook them right now. This should probably disappear in future
			# versions (>> 0.4.x)
			common_raw(common_render_content($this->notice->content, $this->notice));
		}
		common_element_end('p');
    }

    function show_start_time_section() {
		common_element_start('p', 'time');
    }

    function show_notice_link() {
		$noticeurl = common_local_url('shownotice', array('notice' => $this->notice->id));
		# XXX: we need to figure this out better. Is this right?
146
		if (strcmp($this->notice->uri, $noticeurl) != 0 && preg_match('/^http/', $this->notice->uri)) {
147 148 149 150 151 152 153 154 155 156 157 158 159
			$noticeurl = $this->notice->uri;
		}
		common_element_start('a', array('class' => 'permalink',
								  'rel' => 'bookmark',
								  'href' => $noticeurl));
		common_element('abbr', array('class' => 'published',
									 'title' => common_date_iso8601($this->notice->created)),
						common_date_string($this->notice->created));
		common_element_end('a');
    }

    function show_notice_source() {
		if ($this->notice->source) {
Sarven Capadisli's avatar
Sarven Capadisli committed
160
			common_element('span', null, _(' from '));
Evan Prodromou's avatar
Evan Prodromou committed
161
            $source_name = _($this->notice->source);
162
            switch ($this->notice->source) {
163 164 165 166 167 168 169 170
             case 'web':
             case 'xmpp':
             case 'mail':
             case 'omb':
             case 'api':
                common_element('span', 'noticesource', $source_name);
                break;
             default:
171
                $ns = Notice_source::staticGet($this->notice->source);
172 173 174 175 176 177 178 179
                if ($ns) {
                    common_element('a', array('href' => $ns->url),
                                   $ns->name);
                } else {
                    common_element('span', 'noticesource', $source_name);
                }
                break;
            }
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196
		}
    }

    function show_reply_to() {
		if ($this->notice->reply_to) {
			$replyurl = common_local_url('shownotice', array('notice' => $this->notice->reply_to));
			common_text(' (');
			common_element('a', array('class' => 'inreplyto',
									  'href' => $replyurl),
						   _('in reply to...'));
			common_text(')');
		}
    }

    function show_reply_link() {
		common_element_start('a',
							 array('href' => common_local_url('newnotice',
197 198
															  array('replyto' => $this->profile->nickname)),
								   'onclick' => 'return doreply("'.$this->profile->nickname.'", '.$this->notice->id.');',
199 200
								   'title' => _('reply'),
								   'class' => 'replybutton'));
Sarven Capadisli's avatar
Sarven Capadisli committed
201
		common_raw(' &#8594;');
202 203 204 205 206 207 208 209 210 211
		common_element_end('a');
    }

    function show_delete_link() {
        $user = common_current_user();
		if ($user && $this->notice->profile_id == $user->id) {
			$deleteurl = common_local_url('deletenotice', array('notice' => $this->notice->id));
			common_element_start('a', array('class' => 'deletenotice',
											'href' => $deleteurl,
											'title' => _('delete')));
Sarven Capadisli's avatar
Sarven Capadisli committed
212
			common_raw(' &#215;');
213 214 215 216 217 218 219 220 221 222 223 224
			common_element_end('a');
		}
    }

    function show_end_time_section() {
		common_element_end('p');
    }

    function show_end() {
		common_element_end('li');
    }
}