X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Fattachmentlist.php;h=a2446a886a73715193f9ea68f36fcc149733b312;hb=1c04601a9c3fe9b2a358a01478cf7cd141808d48;hp=9485fe3d65f4e071dd784cade05369cc9fd0edb8;hpb=47d475d66a775de430330102f063bf0897604131;p=quix0rs-gnu-social.git diff --git a/lib/attachmentlist.php b/lib/attachmentlist.php index 9485fe3d65..d6cfda6f95 100644 --- a/lib/attachmentlist.php +++ b/lib/attachmentlist.php @@ -1,6 +1,6 @@ . * * @category UI - * @package Laconica - * @author Evan Prodromou - * @author Sarven Capadisli - * @copyright 2008 Control Yourself, Inc. + * @package StatusNet + * @author Evan Prodromou + * @author Sarven Capadisli + * @copyright 2008 StatusNet, Inc. * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 - * @link http://laconi.ca/ + * @link http://status.net/ */ -if (!defined('LACONICA')) { - exit(1); -} +if (!defined('GNUSOCIAL')) { exit(1); } /** * widget for displaying a list of notice attachments @@ -41,16 +39,14 @@ if (!defined('LACONICA')) { * data for e.g. the profile page. * * @category UI - * @package Laconica - * @author Evan Prodromou + * @package StatusNet + * @author Evan Prodromou * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 - * @link http://laconi.ca/ + * @link http://status.net/ * @see Notice - * @see StreamAction * @see NoticeListItem * @see ProfileNoticeList */ - class AttachmentList extends Widget { /** the current stream of notices being displayed. */ @@ -62,7 +58,6 @@ class AttachmentList extends Widget * * @param Notice $notice stream of notices from DB_DataObject */ - function __construct($notice, $out=null) { parent::__construct($out); @@ -70,231 +65,58 @@ class AttachmentList extends Widget } /** - * show the list of notices + * show the list of attachments * * "Uses up" the stream by looping through it. So, probably can't * be called twice on the same list. * - * @return int count of notices listed. + * @return int count of items listed. */ - function show() { -// $this->out->elementStart('div', array('id' =>'attachments_primary')); - $this->out->elementStart('div', array('id' =>'content')); - $this->out->element('h2', null, _('Attachments')); - $this->out->elementStart('ul', array('class' => 'attachments')); - - $atts = new File; - $att = $atts->getAttachments($this->notice->id); - foreach ($att as $n=>$attachment) { - $item = $this->newListItem($attachment); - $item->show(); - } - - $this->out->elementEnd('ul'); - $this->out->elementEnd('div'); - - return count($att); - } - - /** - * returns a new list item for the current notice - * - * Recipe (factory?) method; overridden by sub-classes to give - * a different list item class. - * - * @param Notice $notice the current notice - * - * @return NoticeListItem a list item for displaying the notice - */ - - function newListItem($attachment) - { - return new AttachmentListItem($attachment, $this->out); - } -} - -/** - * widget for displaying a single notice - * - * This widget has the core smarts for showing a single notice: what to display, - * where, and under which circumstances. Its key method is show(); this is a recipe - * that calls all the other show*() methods to build up a single notice. The - * ProfileNoticeListItem subclass, for example, overrides showAuthor() to skip - * author info (since that's implicit by the data in the page). - * - * @category UI - * @package Laconica - * @author Evan Prodromou - * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 - * @link http://laconi.ca/ - * @see NoticeList - * @see ProfileNoticeListItem - */ - -class AttachmentListItem extends Widget -{ - /** The attachment this item will show. */ - - var $attachment = null; - - var $oembed = null; - - /** - * constructor - * - * Also initializes the profile attribute. - * - * @param Notice $notice The notice we'll display - */ - - function __construct($attachment, $out=null) - { - parent::__construct($out); - $this->attachment = $attachment; - $this->oembed = File_oembed::staticGet('file_id', $this->attachment->id); - } - - function title() { - if (empty($this->attachment->title)) { - if (empty($this->oembed->title)) { - $title = $this->attachment->url; - } else { - $title = $this->oembed->title; + $attachments = $this->notice->attachments(); + $representable = false; + foreach ($attachments as $key=>$att) { + // Only show attachments representable with a title + if ($att->getTitle() === null) { + unset($attachments[$key]); } - } else { - $title = $this->attachment->title; + } + if (!count($attachments)) { + return 0; } - return $title; - } - - function linkTitle() { - return 'Our page for ' . $this->title(); - } - - /** - * recipe function for displaying a single notice. - * - * This uses all the other methods to correctly display a notice. Override - * it or one of the others to fine-tune the output. - * - * @return void - */ - - function show() - { - $this->showStart(); - $this->showNoticeAttachment(); - $this->showEnd(); - } - - function linkAttr() { - return array('class' => 'attachment', 'href' => common_local_url('attachment', array('attachment' => $this->attachment->id))); - } - - function showLink() { - $attr = $this->linkAttr(); - $text = $this->linkTitle(); - $this->out->elementStart('h4'); - $this->out->element('a', $attr, $text); + $this->showListStart(); - if ($this->attachment->url !== $this->title()) - $this->out->element('span', null, " ({$this->attachment->url})"); + foreach ($attachments as $att) { + $item = $this->newListItem($att); + $item->show(); + } + $this->showListEnd(); - $this->out->elementEnd('h4'); + return count($attachments); } - function showNoticeAttachment() + function showListStart() { - $this->showLink(); - $this->showRepresentation(); + $this->out->elementStart('ol', array('class' => 'attachments')); } - function showRepresentation() { - $thumbnail = File_thumbnail::staticGet('file_id', $this->attachment->id); - if (!empty($thumbnail)) { - $this->out->elementStart('a', $this->linkAttr()/*'href' => $this->linkTo()*/); - $this->out->element('img', array('alt' => 'nothing to say', 'src' => $thumbnail->url, 'width' => $thumbnail->width, 'height' => $thumbnail->height)); - $this->out->elementEnd('a'); - } - } - - /** - * start a single notice. - * - * @return void - */ - - function showStart() + function showListEnd() { - // XXX: RDFa - // TODO: add notice_type class e.g., notice_video, notice_image - $this->out->elementStart('li'); + $this->out->elementEnd('ol'); } /** - * finish the notice + * returns a new list item for the current attachment * - * Close the last elements in the notice list item + * @param File $attachment the current attachment * - * @return void + * @return AttachmentListItem a list item for displaying the attachment */ - - function showEnd() + function newListItem(File $attachment) { - $this->out->elementEnd('li'); - } -} - -class Attachment extends AttachmentListItem -{ - function show() { - $this->showNoticeAttachment(); - } - - function linkAttr() { - return array('class' => 'external', 'href' => $this->attachment->url); - } - - function linkTitle() { - return 'Direct link to ' . $this->title(); - } - - function showRepresentation() { - if (empty($this->oembed->type)) { - if (empty($this->attachment->mimetype)) { - $this->out->element('pre', null, 'oh well... not sure how to handle the following: ' . print_r($this->attachment, true)); - } else { - switch ($this->attachment->mimetype) { - case 'image/gif': - case 'image/png': - case 'image/jpg': - case 'image/jpeg': - $this->out->element('img', array('src' => $this->attachment->url, 'alt' => 'alt')); - break; - } - } - } else { - switch ($this->oembed->type) { - case 'rich': - case 'video': - case 'link': - if (!empty($this->oembed->html)) { - $this->out->raw($this->oembed->html); - } - break; - - case 'photo': - $this->out->element('img', array('src' => $this->oembed->url, 'width' => $this->oembed->width, 'height' => $this->oembed->height, 'alt' => 'alt')); - break; - - default: - $this->out->element('pre', null, 'oh well... not sure how to handle the following oembed: ' . print_r($this->oembed, true)); - } - } + return new AttachmentListItem($attachment, $this->out); } } -